我正在使用node和MongoDB。我有一个要更新(或插入)集合中的对象数组。
我知道是否存在基于属性game_id
的该对象之一。
这是我简化的数组:
[{ 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);
}
}
我看到您可以基于
multi
的.update()
参数在一个操作中更新多行。但是我不知道如何写查询...您知道是否可以这样做?
最佳答案
希望以下对您有所帮助:
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()方法。这正是您的需要。