如何从文档列表中更新MongoDB中的许多文档?

时间:2017-05-17 11:43:02

标签: javascript node.js mongodb

我有以下情况:

要保存的文件:

[
    {
        character: "Elf",
        mana: 222
    },
    {
        character: "Human",
        mana: 100
    },
    {
        character: "Dwarf",
        mana: 0
    }
]

我的mongodb中有以下内容:

[
    {
        character: "Elf",
        mana: 150
    },
    {
        character: "Human",
        mana: 50
    },
    {
        character: "Dwarf",
        mana: 50
    }
]

如何进行更新以使角色获得适当的法术值?

我不能假设值超过某个值,可能还有另外50个不同字符的对象。

如果我在数据库中找不到该字符,我想插入新字符,否则只需更新它。

我一直在查看文档,但看起来updateMany并不是我想要的,update一个接一个看起来很贵。

我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:2)

mongodb update可以进行多次更新,但无法接受要更新的数组。所以你必须一个接一个地去。如果您想要完全并行,请使用下面的async.each

async.each(docs, function(doc, next){
    db.collection('characters').update({character:doc.character},{$set:{mana:doc.mana}, $setOnInsert:{character:doc.character}},{upsert:true}, function(err, res){
        next(null, null);
    })
    }, function(err, res){
        // all data have been updated.
    })