如何在 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
我有一个 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