如何更新数组中的子对象(更新)MongoDB

how to update sub object in array (update) MongoDB

我只想更新 where "sku": "abcd" 这 “收到”:34, 到 “收到”:50,

我尝试使用 updateOne(

) 但不幸的是我得到了错误

{
  "_id": {
    "$oid": "62684e70e89eca781cc4f384"
  },
  "user": "ronen",
  "roles": {
    "User": 2001,
    "Editor": 1984,
    "Admin": 5150
  },
  
  "Stock": [
    {
      "sku": "777",
      "productname": "rone4n",
      "sendout": 5,
      "recived": 3,
      "totalinstock": 55,
      "location": "A770770",
      "_id": {
        "$oid": "626a9bb384cd350c6e784794"
      }
    },
    {
      "sku": "abcd",
      "productname": "ron",
      "sendout": 43,
      "recived": 34,
      "totalinstock": 444,
      "location": "fff",
      "_id": {
        "$oid": "626adab728fcc6005453a481"
      }
    }
  ],
 
}

我更喜欢MongoDB这边

我希望得到这样的东西

"sku": "abcd",
      "productname": "ron",
      "sendout": 43,
      "recived": 50,
      "totalinstock": 444,
      "location": "fff",
      "_id": {
        "$oid": "626adab728fcc6005453a481"


您可以使用 .update() 方法和 $set 来更新值。

db.collection.update({
  "stock.sku": "abcd"
},
{
  "$set": {
    "stock.$.recived": 50
  }
})

你可以查看mongo playground here

我在最后找到了答案 在线阅读后 感谢帮助过的人 我附上代码 也许它会对其他人有所帮助

await User.updateOne(
    {
        Stock: {
            $elemMatch: {
                sku: req.body.sku
            }
        }
    }, {
        $set: {
            "Stock.$.recived": addrecived
        }
    }
)