【发布时间】:2019-02-16 16:57:17
【问题描述】:
我有一个看起来像这样的嵌套嵌入文档。每个帖子都有 n-cmets,每个评论都有一个用户详细信息,包括姓名和电子邮件 ID。
我只想将评论用户的姓名投影到列表中
{
"PostId":"Post001",
"Comments":[
{"_id": "001",
"CommentedBy":{
"_id":"User001",
"Name":"UserName001",
"email":"user001@eg.com"
}
},
{"_id": "002",
"CommentedBy":{
"_id":"User002",
"Name":"UserName002",
"email":"user001@eg.com"
}
},
{"_id": "003",
"CommentedBy":{
"_id":"User003",
"Name":"UserName003",
"email":"user001@eg.com"
}
}
]
}
我想通过使用 mongodb 的聚合管道转换成类似这样的东西。
{
"PostId":"Post001"
"Comments":[
{"_id": "001",
"CommentedBy":"UserName001",
},
{"_id": "002",
"CommentedBy": "UserName002"
},
{"_id": "003",
"CommentedBy": "UserName003"
}
]
}
使用 mongo 的投影查询提供了一个 CommentedBy 列表,其中包含所有名称。 如何使用 mongo 的聚合查询来实现这一点。有没有办法不使用$unwind。
我尝试过的查询和我得到的结果。
db.getCollection('post').aggregate([
{$project:{"Comments.CommentedBy":"$Comments.CommentedBy.Name"}}
])
{
"_id" : ObjectId("5b98b4cc3bb8c65aeacabd78"),
"Comments" : [
{
"CommentedBy" : [
"UserName001",
"UserName002",
"UserName003"
]
},
{
"CommentedBy" : [
"UserName001",
"UserName002",
"UserName003"
]
},
{
"CommentedBy" : [
"UserName001",
"UserName002",
"UserName003"
]
}
]
}
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework pymongo