我正在使用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参数更新值(并且不要更改描述)。 如果没有,我想向数组添加一个新项目,并带有参数名称和值以及默认描述。
该怎么办? 谢谢
答案 0 :(得分:2)
在嵌入式阵列上无法进行upsert操作。它必须是两步过程。
您要么先(尝试)删除记录,然后再推送它。或先更新记录,如果失败,则将其插入。
第一种方法:(首先将其删除)
account password
sys change_on_install
system manager
sysman oem_temp
然后将其插入:
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"}}
}
);