因此,我是聚合框架的新手。我有以下文件的2个收藏夹:
用户
{
'_id': ObjectId(user1),
'name': 'Name1',
'event': ObjectId(event1)
},
{
'_id': ObjectId(user2),
'name': 'Name2',
'event': ObjectId(event2)
},
{
'_id': ObjectId(user3),
'name': 'Name3',
'event': ObjectId(event1)
}
事件
{
'_id': ObjectId(event1),
'name': 'Event2',
'type': 'Party'
},
{
'_id': ObjectId(event2),
'name': 'Event2',
'type': 'Meeting'
}
预期产量
[
{
'_id': ObjectId(user1),
'name': 'Name1',
'event': 'Party'
},
{
'_id': ObjectId(user2),
'name': 'Name2',
'event': 'Meeting'
},
{
'_id': ObjectId(user3),
'name': 'Name3',
'event': 'Party'
}
]
如您所见,按照上面的说明,我想分组用户,并根据他们参加的活动返回用户。
我到目前为止所做的事情(按用户汇总)
[
{
"$lookup":
{
"from": "events",
"localField": "event",
"foreignField": "_id",
"as": "Events"
}
},
{
"$unwind": "$Events"
},
{
"$group":
{
"_id":
{
"type": "$Events.type"
}
}
}
]
我只得到活动文件。输出为:
{ 'type':'Party'},
{'type': 'Meeting'}
有人可以指导我如何从另一个集合的文档中按字段对集合中的文档进行分组吗?
谢谢!
答案 0 :(得分:2)
以下文档可以帮助您解决问题。请参阅文档-> ref.Document
答案 1 :(得分:0)
您可以使用$project
代替$group
:
db.users.aggregate([
{
"$lookup": {
"from": "events",
"localField": "event",
"foreignField": "_id",
"as": "Events"
}
},
{
"$unwind": "$Events"
},
{
$project: {
_id: 1,
name: 1,
event: "$Events.name"
}
}
])