首页 > 解决方案 > 批量 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 毫秒),我猜这是过滤器部分需要的时间太长。

标签: mongodbmongoosenestjsbulk

解决方案


我找到的解决方案是搜索不超过两个字段,而只搜索一个(在 ma 的情况下只是 _id),这大大提高了性能


推荐阅读