如何使用基于“通用”条件的mongoDB一次更新多个文档?

时间:2015-11-26 08:49:32

标签: node.js mongodb upsert

我正在使用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()在一个操作中更新多行。但我不知道如何编写查询...

你知道是否可以这样做?

1 个答案:

答案 0 :(得分: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文档以获取update()方法的批量操作upsert。这正是你需要的。