javascript - 如何从文档列表更新 MongoDB 中的多个文档?

标签 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
    }
]

进行更新的最佳方式是什么,以便 Angular 色获得正确的法力值?

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

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

我一直在查看文档,但看起来 updateMany 不是我想要的,而且 update 一项一项看起来很昂贵。

我怎样才能正确地做到这一点?

最佳答案

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.
    })

关于javascript - 如何从文档列表更新 MongoDB 中的多个文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44023891/

相关文章:

javascript正则表达式忽略文本之间的条件

javascript - 如果我多次需要一个文件,它会被多次解析吗?

node.js - Sequelize : extra column in query

javascript - 我如何才能仅按 NodeJS 中 ISODate 字段上的日期进行分组

node.js - Mongoose:错误找不到模块调试

javascript - 如何使用 React hooks 和 Redux 从 useEffect 执行 store.unsubscribe

javascript - JS不支持firefox 15.0

javascript - 你能在javascript中的字符串数组中进行二进制搜索吗

node.js - Travis CI 没有使用正确的 node.js 版本

Java MongoDB 对象版本控制