从文档字段中按索引选择自定义数组元素

时间:2015-07-20 21:01:45

标签: mongodb mongodb-query aggregation-framework

何我可以通过文档中定义的索引选择特定的数组元素?

例如,我有以下文件:

{ "_id" : 1, "idx" : 1, "vals" : [ 1, 2 ] }

我想选择vals索引定义的idx元素。

我已设法选择由文字定义的特定数组元素:

> db.test.find({_id:1}, {vals:{$slice:[1, 1]}})
{ "_id" : 1, "idx" : 1, "vals" : [ 2 ] }

但是如何在idx运算符中使用$slice字段?

1 个答案:

答案 0 :(得分:1)

使用$arrayElemAt运算符在MongoDB 3.2中执行此操作的最佳方法是:

db.test.aggregate([  
    { "$project": { "vals": { "$arrayElemAt": [ "$vals", "$idx" ] } } }
])

如果您在查询条件中使用findOne并获得_id值,也可以使用idx

var idx = db.test.findOne({ "_id": 1 }).idx
db.test.find({ "_id": 1 }, { "vals": { "$slice": [ idx, 1 ]}})

使用find,您需要使用cursor.map

db.test.find().map(function(doc) { 
    doc.vals = doc.vals.slice(doc.idx, 2); 
    return doc; 
})

结果:

[ { "_id" : 1, "asd" : 1, "vals" : [ 2 ] } ]