[英]update nested Object in Array in mongoDB
我被困在我想创建的查询中。 假设我在随机集合中有以下文档:
[
{
"name":"Max",
"cars":[
{
"company":"Ford",
"price":5000
},
{
"company":"BMW",
"price":7500
}
]
},
{
"name":"Josy",
"cars":[
{
"company":"Ford",
"price":3000
},
{
"company":"BMW",
"price":5500
}
]
}
]
在第一步中,我想将其他数据添加到我的 Array Cars 中,这对我来说很好:
db.user.updateMany(
{},
{$set:{"cars.$[].isPremium":false}}
)
但是现在我想将 isPremium 更新为 true 如果价格更高 3500
db.user.updateMany(
{cars : {$elemMatch:{price:{$gt:3500}}} },
{$set:{"cars.$[].isPremium":true}}
)
但这不起作用,因为价格为 3000 的乔西福特被设置为溢价,但价格不 > 3500。那么出了什么问题?
解决方案 #1:在使用false
值初始化isPremium
字段后尝试以下查询:
db.user.updateMany(
{
cars: { $elemMatch: { price: { $gt: 3500 } } }
},
{
$set: {
"cars.$[obj].isPremium": true
}
},
{
arrayFilters: [
{
"obj.price": { $gt: 3500 }
}
]
}
)
解决方案#2:不需要您的第一个更新查询(即,使用false
初始化isPremium
)。
db.user.updateMany(
{
cars: { $elemMatch: { price: { $gt: 3500 } } }
},
{
$set: {
"cars.$[premium].isPremium": true,
"cars.$[nonPremium].isPremium": false
}
},
{
arrayFilters: [
{
"premium.price": { $gt: 3500 }
},
{
"nonPremium.price": { $lte: 3500 }
}
]
}
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.