2015-11-26 54 views
1

我正在使用節點和MongoDB。我有一個想要更新(或插入)集合的對象數組。 我知道這個對象之一是否基於屬性game_id存在。如何使用基於「通用」條件的mongoDB一次更新多個文檔?

這裏是我的數組簡化爲:

[{ game_id: 10, foobar: "abc" }, 
{ game_id: 51, foobar: "def" }, 
{ game_id: 75, foobar: "ghi" }] 

我設法將其與循環for但我想完成所有的更新/插入在一個單一的操作。

這裏是我的代碼:

for (i = 0; i < boardgames.length; i += 1) { 
    boardgame = boardgames[i]; 
    if (boardgame.hasOwnProperty('game_id')) { 
     db.collection('boardgames_debug').update({ game_id: boardgame.game_id}, 
     boardgame, 
     { upsert: true }, //insert if not exist 
     callbackUpset); 
    } 
} 

我看到你可以根據參數的.update()multi在一個操作中更新多個行。但我不知道如何寫查詢...

你知道是否有可能這樣做?

+0

我不認爲有可能在一個查詢中執行此操作。 –

+0

https://docs.mongodb.org/manual/core/bulk-write-operations/ –

+0

'多'更新符合查詢條件的多個文檔。它不會根據多個查詢更新/插入多個文檔 – Abie

回答

0

我希望下面的幫助你:

var bulkWriteOperation = db.car.initializeUnorderedBulkOp(); 
for (int i=0;i<100;i++){ 
    bulkWriteOperation.find({game_id: boardgame.game_id}).upsert().update({$setOnInsert: { defaultQty: 0, inStock: true },$currentDate: { lastModified: true },$set: { status: "I", points: "0" }}); 
} 
bulkWriteOperation.execute(); 

詳細告知檢查的MongoDB文檔的批量操作UPSERT爲update()方法。這正是你需要的。

相關問題