[英]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.