mongodb - 批量 upsert 优化 mongoDB
问题描述
我有一个包含大约 50 000 个条目的集合,其中包含一些字段。
其中两个的组合是 uniq(一个 ObjectID 和一个字符串)。
我需要大约 15 秒来更新 500 个条目。有没有办法更快地完成它?我尝试在使用nestJS 的集合上使用bulkWrite(带有ordered:false)而不是多个updateOne(),但没有任何收获。
myObjects.forEach(objects => {
const upsertDoc = {
updateOne: {
filter: { someOid: myOid, someString: myString },
update: { $set: myObject },
upsert: true,
},
};
bulkOps.push(upsertDoc);
}
myModel.collection.bulkWrite(bulkOps, { ordered: false });
我尝试了一个空集合,它的速度更快(200 毫秒),我猜这是过滤器部分需要的时间太长。
解决方案
我找到的解决方案是搜索不超过两个字段,而只搜索一个(在 ma 的情况下只是 _id),这大大提高了性能
推荐阅读
- c# - 在异常过滤器类 WebApi C# 中重新调用 ActionMethod
- javascript - 如何在 React Native 中设置键盘上方的 TextInput
- vue.js - Vue.js:如何从布局事件中调用页面方法?
- javascript - 光滑的滑块在引导程序 4 中无法正常工作
- linq - 查找一个列表中具有与另一个对象列表中的属性匹配的属性的所有对象
- java - 用最简单的话来说,同步到存储库和更新到 HEAD 有什么区别?
- c# - 无法从控制器属性中的自定义异常过滤器中读取配置
- java - 检查是否有某些字母以 [cages] 为界并替换它们的算法?
- excel - 如何仅在输入特定值时创建时间戳
- javascript - 如何将带有剪切路径和蒙版的 SVG 放在图像 src 中?