繁体   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