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

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