我有一个对象数组,如果可能,我只想使用一个I / O操作将它们存储在一个集合中。如果集合中已存在任何文档,我想替换它,否则插入它。
这些是我找到的解决方案,但并不完全符合我的要求:
insertMany()
:这并不能替换已经存在的文档,而是抛出异常(这是我在Mongodb文档中找到的,但我不知道它是否&& #39;和mongoose一样。
update()
或updateMany()
与upsert = true
:这对我也没有帮助,因为在这里我必须对存储的所有内容进行相同的更新文档。
mongodb或mongoose中没有replaceMany()
。
有没有人知道使用mongoose和node.js做replaceMany
的最佳方法
答案 0 :(得分:1)
有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);
答案 1 :(得分:0)
您需要像这样查询:
db.getCollection('hotspot').update({
/Your Condition/
}, {
$set: {
"New Key": "Value"
}
}, {
multi: true,
upsert: true
});
它符合您的要求.. !!!