集合上的MongoDB聚合投影

集合上的MongoDB聚合投影,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我收集了很多这样的文件 { "_id" : ObjectId("5696db8a049c1bb2ecaaa10f"), "resultSets" : [ { "headers" : [ "A", "B" ], "data" : [ [ 0, 1 ] ] }, { "headers" : [ "C", "D

我收集了很多这样的文件

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

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

        }
   ]
}
我想使用聚合将此文档作为一个项目进行投影

{ C: 2, D: 3 }

只是想知道这样做的最佳方式是什么。

如果您使用的是MongoDB 3.2,那么在获得所需的聚合输出方面会有很大的帮助,尤其是在处理以下问题时

运行以下聚合管道,它使用操作符在新键中返回所需的值:

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);

您使用的是哪个MongoDB版本?我使用的是MongoDB版本3.2。这非常有帮助。如果我只想匹配数组[C,D]中的特定值,那么除了$in之外,还有其他操作符可以使用吗。例如,我想匹配文档中只存在[C,D]的特定顺序,原因是我有一些数组是[C,D,E,F],我只想匹配[C,D]的数组。