使用bulkWrite更新/ upsert不起作用

时间:2017-11-03 15:17:38

标签: node.js mongodb mongoose

我很难让Model.bulkWrite获得我的文件。我没有在文档中发现任何暗示这是不可能的(尽管,也许我错过了它)。下面是我正在使用的代码示例:

var opts = [];
for (var item of data){
    opts.push({
        updateOne: {
            filter: {"id": item.id},
            update: {"$setOnInsert": {
                    "id": item.id,
                    "name": item.name}
            }
        }
    })
};

Item.bulkWrite(
    opts,
    {upsert: true},
    function(err, result){
        if(err) throw err;
        console.log(result);
        // do more stuff here
    }
);

我通过循环运行多个更新/ upsert没有任何问题,但是当我这样做时,我在操作完成时无法访问回调,因此这对我不起作用。我还测试了上面的代码,将updateOne部分替换为insertOne部分,并且没有任何问题。

有没有人有任何想法发生了什么?在这里upsert不是一个有效的选项?

1 个答案:

答案 0 :(得分:2)

@Alex Blex,你是对的钱。我想这只是我的疏忽。对于那些感兴趣的人,这意味着从第二部分代码中删除upsert并将第一部分更改为:

var opts = [];
for (var item of data){
    opts.push({
        updateOne: {
            filter: {"id": item.id},
            update: {"$setOnInsert": {
                    "id": item.id,
                    "name": item.name}
            },
            upsert: true
        }
    })
};