簡體   English   中英

如何更新 MongoDB 文檔中的數組

[英]How to update array inside MongoDB document

有人可以幫我解決更新 MongoDB 文檔中的數組 object 的解決方案嗎,我嘗試了幾種方法,但仍然是更新,這是我的文檔,我想更新文檔中的數組。

{
"title": "Products",
"description": "test",
"image": "bdd8510d75f6e83ad308d5f306afccef_image.jpg",
"_created_at": "2021-06-07T20:51:08.316Z",
"ratingCount": 0,
"ratingTotal": 0,
"placeListSave": [
    {
        "objectId": "g70brr45pfi",
        "name": "Kale",
        "email": "null",
        "strBrandLogo": "84de8865e3223d1ca61386355895aa04_image.jpg",
        "storeNumber": "56",
        "phone": "0815342119",
        "createdAt": "2021-06-10T10:19:53.384Z",
        "image": "ad1fb7602c2188223fd891a52373cb9d_image.jpg"
    },
    {
        "objectId": "0qokn33p773",
        "name": "Apple",
        "email": null,
        "strBrandLogo": null,
        "storeNumber": "01",
        "phone": "011 393 8600",
        "createdAt": "2021-06-11T03:11:17.342Z",
        "image": "8cfcbf2bcb5e3b4ea8ade44d3825bb52_image.jpg"
    }
]

}

所以我只想更新蘋果 object 並更改數據,我嘗試了以下代碼但似乎不起作用。

`

  var db = client.db("test");

  try {
    db.collection("ShoppingCentres").updateOne({
      "title": req.body.product,
      "placeListSave.objectId": req.body.id,

    }, {
      $set: {
    
        "placeListSave.$.email": req.body.email,
        "placeListSave.$.storeNumber": req.body.storeNumber,
        "placeListSave.$.phone": req.body.phone,
        "placeListSave.name": req.body.name,
      },
    });

    res.json("client");
  } catch (e) {
    console.log("verify", e);
  }
});`

arrayFilters 似乎適合這里:

 db.collection.update({
  "title": "Products",
  "placeListSave.objectId": "0qokn33p773",
 },
 {
   $set: {
     "placeListSave.$[x].email": "test@some.email",
     "placeListSave.$[x].storeNumber": "test",
     "placeListSave.$[x].phone": "test",
     "placeListSave.$[x].name": "test"
  }
 },
 {
  arrayFilters: [
     {
     "x.objectId": "0qokn33p773"
      }
  ]
  })

解釋:為需要更新的元素添加名為“x”的數組過濾器和 objectId,並在 $set 階段使用此過濾器來更新必要的元素。

提示:為了加快更新,您需要在標題字段上添加索引或在 title+placeListSave.objectId 上添加復合索引

操場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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