在嵌入式文档中投影数组的单个元素
Projecting single element of array in embedded document
我有一个包含多层嵌套的文档的集合,底层包含一些数组。例如,像
{
"_id": ObjectId("56cad039213484920df2"),
"foo": "this",
"res": {
"res1": {
"t1": [1, 1, 1, 1, 1, 1]
}
}
...
}
现在我想在嵌套的底层查询单个数组索引。我可以设法访问 entire 数组,类似
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。
您可以使用 $slice
获取第一个 (1)、最后一个 (-1) 和任何切片。 $slice:2
会给你前两个元素 [1, 1]
.
您需要对任何其他索引值使用聚合。
使用 $arrayElemAt
聚合运算符从数组中投影索引值。
类似
db.my_db.aggregate({$match:{'foo': 'this'}}, {$project:{'element2': {$arrayElemAt: ['$res.res1.t1', 1]}}})
我有一个包含多层嵌套的文档的集合,底层包含一些数组。例如,像
{
"_id": ObjectId("56cad039213484920df2"),
"foo": "this",
"res": {
"res1": {
"t1": [1, 1, 1, 1, 1, 1]
}
}
...
}
现在我想在嵌套的底层查询单个数组索引。我可以设法访问 entire 数组,类似
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。
您可以使用 $slice
获取第一个 (1)、最后一个 (-1) 和任何切片。 $slice:2
会给你前两个元素 [1, 1]
.
您需要对任何其他索引值使用聚合。
使用 $arrayElemAt
聚合运算符从数组中投影索引值。
类似
db.my_db.aggregate({$match:{'foo': 'this'}}, {$project:{'element2': {$arrayElemAt: ['$res.res1.t1', 1]}}})