何我可以通过文档中定义的索引选择特定的数组元素?
例如,我有以下文件:
{ "_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
字段?
答案 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 ] } ]