【问题标题】:Return array of fields from subdocument从子文档返回字段数组
【发布时间】:2017-03-28 21:15:30
【问题描述】:

谁能帮我查询 mongo 来展开数组,我正在使用 mongdb 本地驱动程序我的集合文档如下,另外请忽略我的 objectId 它只是为了示例

{  
      "_id":ObjectId(123),
      "name":"Sam",
      "age":20,
      "hobbiesDetail":[  
         {  
            "description":"FootBall",
            "level":"20%"
         },
         {  
            "description":"Cricket",
            "level":"80%"
         }
      ]
   },
   {  
      "_id":ObjectId(124),
      "name":"Ted",
      "age":26,
      "hobbiesDetail":[  
         {  
            "description":"FootBall",
            "level":"20%"
         }
      ]
   }

我的预期输出是

[  
   {  
      "name":"Sam",
      "age":20,
      "hobbies":"Football,Cricket"
   },
   {  
      "name":"Ted",
      "age":26,
      "hobbies":"Football"
   }
]

我只是想展开我的数组并在一个查询中在爱好描述之间添加一个逗号,感谢任何帮助

【问题讨论】:

  • 我不喜欢您的预期输出,[ { 'name': 'Sam', 'age': 20, 'hobbies': ['Football', 'Cricket' ] }] 怎么样?
  • 不,我不能,因为我希望将其转换为 excel,在 excel 中它没有为数组提供正确的结果
  • 我建议您将“爱好”作为数组返回,然后在客户端完成剩余的工作。
  • 哦,谢谢先生,我如何查询以获得您建议的以上结果,因为我无法使用 $concat 我正在使用 mongodb 2.8

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:

您只需要一个带有$map 数组运算符的$projection。

db.collection.aggregate([
    { "$project": { 
        "name": 1, 
        "age": 1, 
        "hobbies": { 
            "$map": { 
                "input": "$hobbiesDetail", 
                "as": "hobby", 
                "in": "$$hobby.description" 
            } 
        } 
    }}
])

【讨论】:

  • 为什么我的爱好领域在顶部 [ {'hobbies': ['Football', 'Cricket' ] , 'name': 'Sam', 'age': 20 }]
  • 我终于想要了
  • 为此我需要添加另一个投影阶段吗?
  • @Parshuram 我有正确的顺序。 Modify the order in which properties are displayed in MongoDB。您可以随时执行此操作,因为您需要客户端处理。你的语言驱动程序是什么?
  • 我正在使用 nodejs,现在我正在玩 robomongo,它没有按照我的 $project 阶段给我正确的顺序
猜你喜欢
  • 1970-01-01
  • 2016-09-27
  • 2019-01-16
  • 2014-06-08
  • 2021-09-30
  • 1970-01-01
  • 2014-05-28
  • 2019-02-13
  • 1970-01-01
相关资源
最近更新 更多