【问题标题】:MongoDB Aggregation - $group after $lookup + $unwindMongoDB 聚合 - $lookup + $unwind 后的 $group
【发布时间】:2019-09-03 22:05:34
【问题描述】:

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


【解决方案1】:

您可以使用$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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-08
      • 2021-05-04
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 2020-10-05
      • 2019-01-21
      相关资源
      最近更新 更多