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