【问题标题】:MongoDB Aggregation: creating subdocumentsMongoDB 聚合:创建子文档
【发布时间】:2015-07-05 16:37:25
【问题描述】:

我有一个 MongoDB 集合,其中包含如下文档:

{
  "_id": ObjectId("..."),
  "code": 22726,
  "parent_code": 35481,
  "parent_description": "posterdati",
},
{
  "_id": ObjectId("..."),
  "code": 22726,
  "parent_code": 35484,
  "parent_description": "vicesindaco",
},
{
  "_id": ObjectId("..."),
  "code": 22727,
  "parent_code": 35487,
  "parent_description": "prefettura",
}

我想使用“code”字段作为 _id 对它们进行 $group,创建一个包含 parent_code 和 parent_description 的子文档数组:

{
    "code": 22726,
    parents: [
        {
            "parent_code": 35481,
            "parent_description": "posterdati"
        },
        {
            "parent_code": 35484,
            "parent_description": "vicesindaco"
        }
    ]
},
{
    "code": 22727,
    parents: [
        {
            "parent_code": 35487,
            "parent_description": "prefettura"
        }
    ]
}

是否可以只使用聚合框架?我在聚合框架文档中没有看到对子文档的引用,所以我认为它不是......

谢谢大家。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    您可以使用以下聚合管道来实现所需的结果:

    db.collection.aggregate([
        {
            "$group": {
                "_id": "$code",
                "parents": {
                    "$addToSet": {
                        "parent_code": "$parent_code",
                        "parent_description": "$parent_description"
                    }
                }
            }
        },
        {
            "$project": {
                "_id": 0,
                "code": "$_id",
                "parents": 1
            }
        }
    ]);
    

    输出

    /* 0 */
    {
        "result" : [ 
            {
                "parents" : [ 
                    {
                        "parent_code" : 35487,
                        "parent_description" : "prefettura"
                    }
                ],
                "code" : 22727
            }, 
            {
                "parents" : [ 
                    {
                        "parent_code" : 35484,
                        "parent_description" : "vicesindaco"
                    }, 
                    {
                        "parent_code" : 35481,
                        "parent_description" : "posterdati"
                    }
                ],
                "code" : 22726
            }
        ],
        "ok" : 1
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-01
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      • 2017-03-18
      • 1970-01-01
      相关资源
      最近更新 更多