我正试图在$set
操作中访问数组元素的nested field
。我有一份类似的文件
{
_id: ObjectId(),
automated: [
{
price: 80.0,
currency: 'USD',
...otherData
},
{
price: 90.0,
currency: 'INR',
...otherData
},
{
price: 120,
currency: 'USD',
...otherData
}
]
}
我想创建一个finalData
obj,它从数组的第一个元素中获取一些值。
所以我试过了,
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"}
}}
])