MongoDB聚合 - $ lookup + $ unwind后的$ group

问题描述 投票:1回答:2

所以我是聚合框架的新手。我有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'}

有人可以指导我如何通过另一个集合中的文档中的字段对文档进行分组?

谢谢!

python mongodb aggregation-framework mongoengine
2个回答
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"
        }
    }
])

2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.