2017-05-17 41 views
1

我有以下情况:如何从文档列表中更新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一个接一个看起来很贵。

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

+0

nvm,读错了。 –

+1

如果您将它们封装在['bulkWrite'](https://docs.mongodb.com/manual/reference/method/db.collection.bulkWrite/#bulkwrite)中,也许多个'update'和'insert'调用非常糟糕-write-operations-executionofoperations)请致电 – k0pernikus

+0

这些字符对象是集合中的单个文档,还是包含多个字符子对象的一个​​文档中的数组? – Philipp

回答

1

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