node.js - Mongoose、Nodejs - 在一次 I/O 中替换多个文档?

标签 node.js mongodb mongoose mongodb-query

我有一个对象数组,如果可能的话,我希望仅使用一次 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/

相关文章:

javascript - 从 upsert (insertOrUpdate) Sequelize Node.js 获取插入行的 id

javascript - Node.js 可视化分析器

javascript - 复制数组任意次数(javascript)

javascript - 同步for循环

javascript - Mongoose 子文档与嵌套模式

javascript - 不理解 Mongoose 模式数组语法

node.js - rethinkdb 和 nodejs : save result in var

javascript - Lambda NodeJS 没有插入到 MongoDB

node.js - MongoDB $unwind 并保留每个展开文档的数组字段以供引用

javascript - 如何在 KeyStone.js 中显式创建新用户