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

Mongodb 从文档字段中按索引选择自定义数组元素,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我如何根据文档中定义的索引选择特定的数组元素 例如,我有以下文件: { "_id" : 1, "idx" : 1, "vals" : [ 1, 2 ] } 我想选择由idx索引定义的vals元素 我已成功选择由文字定义的特定数组元素: > db.test.find({_id:1}, {vals:{$slice:[1, 1]}}) { "_id" : 1, "idx" : 1, "vals" : [ 2 ] } 但是如何在$slice操作符中使用idx字段?最佳方法是在MongoDB 3

我如何根据文档中定义的索引选择特定的数组元素

例如,我有以下文件:

{ "_id" : 1, "idx" : 1, "vals" : [ 1, 2 ] }
我想选择由
idx
索引定义的
vals
元素

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

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

但是如何在
$slice
操作符中使用
idx
字段?

最佳方法是在MongoDB 3.2中使用操作符:

db.test.aggregate([
{“$project”:{“VAL”:{“$ARRAYELMAT”:[“$VAL”,“$idx”]}}
])

如果在查询条件中使用
\u id
,也可以使用
findOne
,并获取
idx

var idx=db.test.findOne({“\u id”:1}).idx
find({“_id”:1},{“vals”:{“$slice”:[idx,1]})
使用
查找
您需要使用

db.test.find().map(函数(doc){
doc.vals=doc.vals.slice(doc.idx,2);
退货单;
})
结果:

[{“\u id”:1,“asd”:1,“VAL”:[2]}]