MongoDB 聚合 - $lookup + $unwind 之后的 $group
MongoDB Aggregation - $group after $lookup + $unwind
所以我是聚合框架的新手。我有 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'
}
]
如您所见,根据上面的解释,我想 分组 用户,并且 return 用户根据他们参加的活动分组。
到目前为止我做了什么(汇总用户)
[
{
"$lookup":
{
"from": "events",
"localField": "event",
"foreignField": "_id",
"as": "Events"
}
},
{
"$unwind": "$Events"
},
{
"$group":
{
"_id":
{
"type": "$Events.type"
}
}
}
]
我只收到活动文件。输出是:
{ 'type':'Party'},
{'type': 'Meeting'}
Can someone please guide me as to how you can group documents in collection by a field from a document in another collection?
谢谢!
您可以使用 $project
而不是 $group
:
db.users.aggregate([
{
"$lookup": {
"from": "events",
"localField": "event",
"foreignField": "_id",
"as": "Events"
}
},
{
"$unwind": "$Events"
},
{
$project: {
_id: 1,
name: 1,
event: "$Events.name"
}
}
])
以下文档可以帮助您解决问题。请参考文档--> ref.Document
所以我是聚合框架的新手。我有 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'
}
]
如您所见,根据上面的解释,我想 分组 用户,并且 return 用户根据他们参加的活动分组。
到目前为止我做了什么(汇总用户)
[
{
"$lookup":
{
"from": "events",
"localField": "event",
"foreignField": "_id",
"as": "Events"
}
},
{
"$unwind": "$Events"
},
{
"$group":
{
"_id":
{
"type": "$Events.type"
}
}
}
]
我只收到活动文件。输出是:
{ 'type':'Party'},
{'type': 'Meeting'}
Can someone please guide me as to how you can group documents in collection by a field from a document in another collection?
谢谢!
您可以使用 $project
而不是 $group
:
db.users.aggregate([
{
"$lookup": {
"from": "events",
"localField": "event",
"foreignField": "_id",
"as": "Events"
}
},
{
"$unwind": "$Events"
},
{
$project: {
_id: 1,
name: 1,
event: "$Events.name"
}
}
])
以下文档可以帮助您解决问题。请参考文档--> ref.Document