【问题标题】:How to regoup in subdocuments, multi document that have a same field in MongoDB?如何在子文档中重新组合,在 MongoDB 中具有相同字段的多文档?
【发布时间】:2020-01-06 23:20:15
【问题描述】:

我在 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"
}

我想重新组合我的文档,这些文档在一个具有状态子文档的文档中的“标签”字段具有相同的值,以获得类似这样的内容:

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

我尝试了不同的方法(聚合、更新、..)来做到这一点,但完全失败了......

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您需要通过labelsite $group 才能$push 您的状态:

    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
            }
        }
    ])
    

    Mongo Playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      • 2014-11-12
      相关资源
      最近更新 更多