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

时间:2018-03-02 12:15:00

标签: node.js mongodb mongoose mongodb-query

我有一个对象数组,如果可能,我只想使用一个I / O操作将它们存储在一个集合中。如果集合中已存在任何文档,我想替换它,否则插入它。

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

  • insertMany():这并不能替换已经存在的文档,而是抛出异常(这是我在Mongodb文档中找到的,但我不知道它是否&& #39;和mongoose一样。

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

  • mongodb或mongoose中没有replaceMany()

有没有人知道使用mongoose和node.js做replaceMany的最佳方法

2 个答案:

答案 0 :(得分:1)

bulkWritehttps://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);

答案 1 :(得分:0)

您需要像这样查询:

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

它符合您的要求.. !!!