我有一个包含多层嵌套文档的集合,底层包含一些数组。例如,像
这样的东西{
"_id": ObjectId("56cad039213484920df2"),
"foo": "this",
"res": {
"res1": {
"t1": [1, 1, 1, 1, 1, 1]
}
}
...
}
现在我想查询底层嵌套的单个数组索引。我可以设法使用类似
的内容访问整个数组db.my_db.find({'foo': 'this'}, {'res.res1.t1': 1})
但是后来from the documentation,我认为为了访问此数组的单个元素,让我们在索引2处说,我应该使用$slice
。
db.my_db.find({'foo': 'this'}, {'res.res1.t1': {$slice: 2}})
然而,这似乎不起作用,而只是给我完整的文件。
我的问题是,如何在嵌入式文档中投影数组的单个元素?
我使用的是Mongo 3.4.1版。功能
答案 0 :(得分:3)
您可以使用$slice
获取第一个(1),最后一个(-1)和任何切片。 $slice:2
将为您提供前两个元素[1, 1]
。
您需要对任何其他索引值使用聚合。
使用$arrayElemAt
聚合器运算符从数组中投射索引值。
像
这样的东西 db.my_db.aggregate({$match:{'foo': 'this'}}, {$project:{'element2': {$arrayElemAt: ['$res.res1.t1', 1]}}})