2016-01-21 151 views
0

我有一个这样的文件集合充满。MongoDB聚合投影集合

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

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

     } 
    ] 
} 

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

{ C: 2, D: 3 } 

只是想知道什么是最好的方法来做到这一点。

+0

哪个MongoDB的版本您使用的? – chridam

+0

我正在使用MongoDB版本3.2 – Yolo49

回答

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

谢谢。这非常有帮助。如果我只想匹配数组[C,D]中的特定值,是否有另一个运算符使用$ in之外的其他运算符。例如,要匹配只有[C,D]以特定顺序存在的文档。 – Yolo49

+0

原因是我有一些数组[C,D,E,F],我只想匹配[C,D]的数组。 – Yolo49