我有一个对象数组,如果可能的话,我希望仅使用一次 I/O 操作将它们存储在一个集合中。如果集合中已存在任何文档,我想替换它,或者以其他方式插入它。
这些是我找到的解决方案,但并不完全按照我想要的方式工作:
insertMany()
:这不会替换已经存在的文档,而是抛出异常(这是我在 Mongodb 文档中找到的,但我不知道它是否与 mongoose 相同)。update()
或 updateMany()
与upsert = true
:这对我也没有帮助,因为在这里我必须对所有存储的文档进行相同的更新。mongodb 或 mongoose 中没有
replaceMany()
。
有谁知道使用 mongoose 和 node.js 进行 replaceMany
的最佳方法
最佳答案
有 bulkWrite
( https://docs.mongodb.com/manual/reference/method/db.collection.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);
关于node.js - Mongoose、Nodejs - 在一次 I/O 中替换多个文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49068960/