如何从文档列表更新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个不同的angular色对象。

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

我正在看文件,但看起来像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. })