使用批量写入进行更新/更新插入不起作用

red*_*sht 0 mongoose mongodb node.js

我很难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
    }
);
Run Code Online (Sandbox Code Playgroud)

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

有谁知道发生了什么?在这里 upsert 不是一个有效的选项吗?

red*_*sht 5

@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
        }
    })
};
Run Code Online (Sandbox Code Playgroud)