簡體   English   中英

在 mongoDB 的數組中更新嵌套的 Object

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM