簡體   English   中英

mongoDB查找和更新或插入

[英]mongoDB find and update or insert

我正在使用mongoDB和mongoose。

我有以下方案:

{ "group" : 
    "items" : [ 
                {
                    "name": "aaa",
                    "value": "aaa_value",
                    "description": "some_text"
                },
                {
                    "name": "bbb",
                    "value": "bbb_value"
                    "description": "some_text2"
                }, 
                {
                    "name": "ccc",
                    "value": "ccc_value"
                    "description": "some_text3"
                },  
        ]
}    

我的函數收到一個名稱和一個值。 如果顯示具有該名稱的項目,我想根據value參數更新值(並且不要更改描述)。 如果沒有,我想向數組添加一個新項目,並帶有參數名稱和值以及默認描述。

如何做呢? 謝謝

在嵌入式陣列上無法進行upsert操作。 它必須是兩步過程。

您要么先(嘗試)刪除記錄,然后再推送它。 或先更新記錄,如果失敗,則將其插入。

第一種方法:(首先將其刪除)

db.collection.update(
  { _id : ObjectId("xyz")},
  { $pull: {"items.name": "aaa"}}
)

然后,將其插入:

db.collection.update(
  { _id : ObjectId("xyz")},
  { $push: {"items": {
         name : "ddd",
         value: "new value",
         description: "new description"
  }}
)

第二種方法:(首先更新它)

var result = db.collection.update(
{
   _id : ObjectId("xyz"),
   "items.name": "aaa")
},
{
   $set: {"items.$.name": {name: "new name"}}
}
);

然后,如果沒有任何更新,則將其插入。

if(!result.nMatched)
{
db.collection.update(
    {
        _id: ObjectId("xyz"),
        "items.name": {$ne: ObjectId("xyz"}}
    },
    {
        $push: {
            items: {
                name: "new name",
                value: "new value",
                description: "new description"
            }
        }
    }
);
}

暫無
暫無

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

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