2017-05-17 76 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. 
    })