相关疑难解决方法(0)

mongo可以upsert数组数据吗?

我有一个像这样的mongo文档.

{
    "_id" : ObjectId("50b429ba0e27b508d854483e"),
    "array" : [
        {
            "id" : "1",
            "letter" : "a"
        },
        {
            "id" : "2",
            "letter" : "b"
        }
    ],
    "tester" : "tom"
}
Run Code Online (Sandbox Code Playgroud)

我希望能够array使用单个mongo命令插入和更新,而不是在find()当时运行中使用条件insert(),update()具体取决于对象的存在.

id是我想成为选择器的项目.所以如果我用这个更新数组:

{
    "id" : "2",
    "letter" : "c"
}
Run Code Online (Sandbox Code Playgroud)

我必须使用一个$set声明

db.soup.update({
    "tester":"tom",
    'array.id': '2'
}, {
    $set: {
        'array.$.letter': 'c'
    }
})
Run Code Online (Sandbox Code Playgroud)

如果我想在数组中插入一个新对象

{
    "id" : "3",
    "letter" : "d"
}
Run Code Online (Sandbox Code Playgroud)

我必须使用一个$push声明

db.soup.update({
    "tester":"tom"
}, { …
Run Code Online (Sandbox Code Playgroud)

mongodb node.js

37
推荐指数
3
解决办法
2万
查看次数

使用mongoose在MongoDB中批量upsert

有没有选择用mongoose执行批量upserts?所以基本上有一个数组并插入每个元素,如果它不存在或更新它,如果它存在?(我正在使用海关_ids)

当我使用.insert时, MongoDB会为重复键返回错误E11000(应该更新).插入多个新文档可以正常工作:

var Users = self.db.collection('Users');

Users.insert(data, function(err){
            if (err) {
                callback(err);
            }
            else {
                callback(null);
            }
        });
Run Code Online (Sandbox Code Playgroud)

使用.save会返回一个错误,该参数必须是单个文档:

Users.save(data, function(err){
   ...
}
Run Code Online (Sandbox Code Playgroud)

这个答案表明没有这样的选择,但它具体针对C#而且已经有3年了.所以我想知道是否有任何选择使用猫鼬做到这一点?

谢谢!

javascript mongoose mongodb node.js mongodb-query

27
推荐指数
4
解决办法
2万
查看次数

标签 统计

mongodb ×2

node.js ×2

javascript ×1

mongodb-query ×1

mongoose ×1