如何在MongoDB中重新组合子文档、具有相同字段的多文档?

如何在MongoDB中重新组合子文档、具有相同字段的多文档?,mongodb,mongodb-query,Mongodb,Mongodb Query,我在mongoDB中有一个集合,如下所示: db.mycollection.find({}) { "_id" : ObjectId("5deb4ce4bbe1b67e6e5611e4"), "site" : "MDC", "label" : "407", "status" : "removed" } { "_id" : ObjectId("5def36379ca17632de773d7e"), "site" : "MDC", "lab

我在mongoDB中有一个集合,如下所示:

db.mycollection.find({}) 

{
    "_id" : ObjectId("5deb4ce4bbe1b67e6e5611e4"),
    "site" : "MDC",
    "label" : "407",
    "status" : "removed"
}

{
    "_id" : ObjectId("5def36379ca17632de773d7e"),
    "site" : "MDC",
    "label" : "407",
    "status" : "new"
}

{
    "_id" : ObjectId("5df4740eab0d76657c19a7d2"),
    "site" : "MDC",
    "label" : "408",
    "status" : "new"
}
我希望将具有相同字段“label”值的文档与状态为子文档的文档重新组合,以获得如下内容:

{
    "_id" : ObjectId("5deb4ce4bbe1b67e6e5611e4"),
    "site" : "MDC",
    "label" : "407",
    "status" : [ 
    {
        "label" : "new"
    }, 
    {
        "label" : "removed"
    }
]
}

我尝试了不同的方法(聚合、更新等),但完全失败了…

您需要通过
标签
站点
$group
推送您的状态:

db.collection.aggregate([
    {
        $group: {
            _id: "$label",
            old_id: { $first: "$_id" },
            site: { $first: "$site" },
            status: { $push: { label: "$status" } }
        }
    },
    {
        $project: {
            _id: "$old_id",
            site: 1,
            label: "$_id",
            status: 1
        }
    }
])