node.js - 使用bulkWrite 更新/更新插入不起作用

标签 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
    }
);

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

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

最佳答案

@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
        }
    })
};

关于node.js - 使用bulkWrite 更新/更新插入不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47099064/

相关文章:

node.js - 为什么在这种情况下使用try/catch一个坏主意?

javascript - jQuery 函数不适用于 node.js 中的 express.js 路由

javascript - 子数组上的 MongoDB 查询

mongodb - 在 Mongodb 的嵌套 map 对象模式中选择特定字段

javascript - Mongodb $in 针对数组对象字段而不是数组对象

javascript - Blockly 在 Node.js 上

javascript - Gulp.js - 在文件开头注入(inject)项目详细信息

mongodb - 如何让 GraphQL 在突变时自动插入当前 UTC?

javascript - 使用 mongoDB 和 mongoose 获取附近的地点

node.js - 将文档数组显示为以 id 为键的对象