如何访问MongoDB中set操作中数组元素的嵌套字段



我正试图在$set操作中访问数组元素的nested field。我有一份类似的文件

{
_id: ObjectId(),
automated: [
{
price: 80.0,
currency: 'USD',
...otherData
},
{
price: 90.0,
currency: 'INR',
...otherData
},
{
price: 120,
currency: 'USD',
...otherData
}
]
}

我想创建一个finalDataobj,它从数组的第一个元素中获取一些值。

所以我试过了,

mongodb.aggregate([
{"$set": {
"finalData" : {
"price": "$automated.0.price",       // 0th index
"currency": "$automated.0.currency"
}
}}
])

但这不起作用,结果是,

{
_id: ObjectId(),
finalData: {
price: [],
currency: []
},
...otherData
}

我找不到任何类似的例子。有人知道怎么做吗?

提前感谢!

编辑

发现了一个类似的问题。建议的解决方案有效,

mongodb.aggregate([
{"$set": {
"finalData" : {
"price": {
"$arrayElemAt": ["$automated.0.price", 0]       // index used here
},
"currency": {
"$arrayElemAt": ["$automated.0.currency", 0]
}
}
}}
])

但这感觉不直观,很高兴知道是否有其他选择。

"$automated.0.price"语法用于查找/更新操作,但不用于聚合管道。

只需使用

mongodb.aggregate([
{"$set": {
"finalData" : {$first: "$automated"}
}}
]) 

mongodb.aggregate([
{"$set": {
"finalData" : {
price: {$first: "$automated.price"}, 
currency: {$first: "$automated.currency"}
}}
]) 

最新更新