如何在 mongo 中投影数组的元素?

How do I project an element of an array in mongo?

我有一个 mongo 文档,其中包含类似

的内容
{date: [2018, 3, 22]}

并且当我尝试将其投影到平面 JSON 结构中并连接这些字段时,我总是得到一个包含 0 个元素的数组,例如。只是用

提取年份
db.getCollection('blah').aggregate([
  {$project: {year: "$date.0"}}
])

我明白了

{"year" : []}

即使在相似的表达式上匹配也能正常工作,例如

db.getCollection('blah').aggregate([
  {$match: {"$date.0": 2018}}
])

选择我期望的文档。

我做错了什么?我搜索了 mongo 文档和 Whosebug,但一无所获。

对于 $project,您应该使用 $arrayElemAt 而不是仅适用于查询的点符号。

db.getCollection('blah').aggregate([
 {$project: {year: { $arrayElemAt: [ "$date", 0 ] }}}
])

更多here