mongoDB查找和更新或插入

时间:2018-08-25 22:09:26

标签: mongodb mongoose

我正在使用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参数更新值(并且不要更改描述)。 如果没有,我想向数组添加一个新项目,并带有参数名称和值以及默认描述。

该怎么办? 谢谢

1 个答案:

答案 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"}}
}
);