Node.js Mongoose,Nodejs-在一个I/O中替换多个文档?
我有一个对象数组,如果可能的话,我想只使用一个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或
:这不会替换已经存在的文档,而是抛出异常(这是我在Mongodb文档中找到的,但我不知道它是否与mongoose相同)insertMany()
或update()
withupdateMany()
:这对我也没有帮助,因为在这里我必须对存储的所有文档执行相同的更新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函数更新它们,然后用新文档替换旧文档。