集合上的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]的数组。