在嵌入式文档中投影数组的单个元素

时间:2017-03-28 19:20:59

标签: arrays mongodb projection

我有一个包含多层嵌套文档的集合,底层包含一些数组。例如,像

这样的东西
{
    "_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版。功能

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]}}})