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