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