集合上的MongoDB聚合投影

时间:2016-01-21 07:04:45

标签: mongodb aggregation-framework

我有一个充满这样的文件的集合。

{
    "_id" : ObjectId("5696db8a049c1bb2ecaaa10f"),
    "resultSets" : [
        {
            "headers" : [ "A", "B" ],
            "data" : [
                [ 0, 1 ]
            ]
        },

        {
            "headers" : [ "C", "D" ],
            "data" : [
                [ 2, 3 ]
            ]

        }
   ]
}

我想使用聚合来投影此文档。

{ C: 2, D: 3 }

只是想知道最好的方法是什么。

1 个答案:

答案 0 :(得分:0)

如果您使用的是MongoDB 3.2,那么 $arrayElemAt 会在获得所需的聚合输出方面发挥很大作用,尤其是处理arrays

运行以下聚合管道,该管道使用 $arrayElemAt 运算符在新键中返回所需的值:

var pipeline = [
    {
        "$match": { "resultSets.headers": { "$in": [ "C", "D" ] } }
    },
    { "$unwind": "$resultSets" },
    {
        "$match": { "resultSets.headers": { "$in": [ "C", "D" ] } }
    },
    {
        "$project": {
            "_id": 0,
            "C": { "$arrayElemAt": [ "$resultSets.data", 0 ] },
            "D": { "$arrayElemAt": [ "$resultSets.data", 1 ] }
        }
    }
]

db.collection.aggregate(pipeline);