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

时间:2019-04-13 08:27:32

标签: python mongodb aggregation-framework mongoengine

因此,我是聚合框架的新手。我有以下文件的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'}
  

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

谢谢!

2 个答案:

答案 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"
        }
    }
])