如何在 MongoDB 中的集合操作中访问数组元素的嵌套字段
How to access nested field of an array element inside a set operation in MongoDB
我试图在 $set
操作中访问数组元素的 nested field
。
我有这样的文件,
{
_id: ObjectId(),
automated: [
{
price: 80.0,
currency: 'USD',
...otherData
},
{
price: 90.0,
currency: 'INR',
...otherData
},
{
price: 120,
currency: 'USD',
...otherData
}
]
}
我想创建一个 finalData
对象,它从数组的第一个元素中获取一些值。
所以我试过了,
mongodb.aggregate([
{"$set": {
"finalData" : {
"price": "$automated.0.price", // 0th index
"currency": "$automated.0.currency"
}
}}
])
但这不起作用,结果是,
{
_id: ObjectId(),
finalData: {
price: [],
currency: []
},
...otherData
}
我找不到任何类似的例子。
有人知道怎么做吗?
提前致谢!
编辑:
找到一个similar question.
建议的解决方案有效,
mongodb.aggregate([
{"$set": {
"finalData" : {
"price": {
"$arrayElemAt": ["$automated.0.price", 0] // index used here
},
"currency": {
"$arrayElemAt": ["$automated.0.currency", 0]
}
}
}}
])
但这感觉并不直观,很高兴知道是否有任何替代方案。
"$automated.0.price"
语法用于 find/update 操作,但不用于聚合管道。
简单使用
mongodb.aggregate([
{"$set": {
"finalData" : {$first: "$automated"}
}}
])
或
mongodb.aggregate([
{"$set": {
"finalData" : {
price: {$first: "$automated.price"},
currency: {$first: "$automated.currency"}
}}
])
我试图在 $set
操作中访问数组元素的 nested field
。
我有这样的文件,
{
_id: ObjectId(),
automated: [
{
price: 80.0,
currency: 'USD',
...otherData
},
{
price: 90.0,
currency: 'INR',
...otherData
},
{
price: 120,
currency: 'USD',
...otherData
}
]
}
我想创建一个 finalData
对象,它从数组的第一个元素中获取一些值。
所以我试过了,
mongodb.aggregate([
{"$set": {
"finalData" : {
"price": "$automated.0.price", // 0th index
"currency": "$automated.0.currency"
}
}}
])
但这不起作用,结果是,
{
_id: ObjectId(),
finalData: {
price: [],
currency: []
},
...otherData
}
我找不到任何类似的例子。 有人知道怎么做吗?
提前致谢!
编辑:
找到一个similar question. 建议的解决方案有效,
mongodb.aggregate([
{"$set": {
"finalData" : {
"price": {
"$arrayElemAt": ["$automated.0.price", 0] // index used here
},
"currency": {
"$arrayElemAt": ["$automated.0.currency", 0]
}
}
}}
])
但这感觉并不直观,很高兴知道是否有任何替代方案。
"$automated.0.price"
语法用于 find/update 操作,但不用于聚合管道。
简单使用
mongodb.aggregate([
{"$set": {
"finalData" : {$first: "$automated"}
}}
])
或
mongodb.aggregate([
{"$set": {
"finalData" : {
price: {$first: "$automated.price"},
currency: {$first: "$automated.currency"}
}}
])