Node.js Mongoose,Nodejs-在一个I/O中替换多个文档?

Node.js Mongoose,Nodejs-在一个I/O中替换多个文档?,node.js,mongodb,mongoose,mongodb-query,Node.js,Mongodb,Mongoose,Mongodb Query,我有一个对象数组,如果可能的话,我想只使用一个I/O操作将它们存储在一个集合中。如果集合中已经存在任何文档,我希望替换它,或者以其他方式插入它 以下是我找到的解决方案,但并不完全符合我的要求: insertMany():这不会替换已经存在的文档,而是抛出异常(这是我在Mongodb文档中找到的,但我不知道它是否与mongoose相同) update()或‎updateMany()withupsert=true:这对我也没有帮助,因为在这里我必须对存储的所有文档执行相同的更新 ‎mongodb或

我有一个对象数组,如果可能的话,我想只使用一个I/O操作将它们存储在一个集合中。如果集合中已经存在任何文档,我希望替换它,或者以其他方式插入它

以下是我找到的解决方案,但并不完全符合我的要求:

  • insertMany()
    :这不会替换已经存在的文档,而是抛出异常(这是我在Mongodb文档中找到的,但我不知道它是否与mongoose相同)

  • update()
    或‎
    updateMany()
    with
    upsert=true
    :这对我也没有帮助,因为在这里我必须对存储的所有文档执行相同的更新

  • ‎mongodb或mongoose中没有
    replaceMany()


是否有人知道使用mongoose和node.js进行替换的最佳方法?您需要这样查询:

db.getCollection('hotspot').update({
    /Your Condition/
}, {
    $set: {
        "New Key": "Value"
    } 
}, {
    multi: true,
    upsert: true
});

它满足您的要求

bulkWrite
(),可以一次执行多个操作。在您的情况下,您可以使用它通过upsert执行多个replaceOne操作。下面的代码显示了如何使用Mongoose执行此操作:

// Assuming *data* is an array of documents that you want to insert (or replace)
const bulkData = data.map(item => (
    {
        replaceOne: {
            upsert: true,
            filter: {
                // Filter specification. You must provide a field that
                // identifies *item*
            },
            replacement: item
        }
    }
));
db.bulkWrite(bulkData);

使用此解决方案,我必须对所有要更新的文档执行相同的操作,但这不是我想要的。我想从mongodb获取文档,使用我创建的node.js函数更新它们,然后用新文档替换旧文档。