$lookup+$unfind后的MongoDB聚合$group

2024-05-16 11:01:23 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我对聚合框架还是个新手。我有两个收藏这些文件:

用户

{
    '_id': ObjectId(user1),
    'name': 'Name1',
    'event': ObjectId(event1)
},
{
    '_id': ObjectId(user2),
    'name': 'Name2',
    'event': ObjectId(event2)
},
{
    '_id': ObjectId(user3),
    'name': 'Name3',
    'event': ObjectId(event1)
}

事件

^{pr2}$

预期输出

[
    {
    '_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'}

Can someone please guide me as to how you can group documents in collection by a field from a document in another collection?

谢谢你!在


Tags: 文件用户nameeventidpartytypeevents
2条回答

以下文档可以帮助您解决问题。请参阅文档>;ref.Document

您可以使用$project代替$group

db.users.aggregate([
    {
        "$lookup": {
            "from": "events",
            "localField": "event",
            "foreignField": "_id",
            "as": "Events"
        }
    },
    {
        "$unwind": "$Events"
    },
    {
        $project: {
            _id: 1,
            name: 1,
            event: "$Events.name"
        }
    }
])

相关问题 更多 >