Обновление массовых данных в Mongodb

#performance #mongoose #mongodb-query #query-optimization

#Производительность #мангуст #mongodb-запрос #оптимизация запросов

Вопрос:

В моей коллекции 50 тысяч пользователей, я хочу добавить новое поле, предположим rowNumber , к каждой записи, я пробовал использовать это решение cursor , но это занимает слишком много времени, так как я могу повысить производительность или какой будет лучший подход?

   let user, cursor, rowNumber = 1;
  cursor = User.aggregate().cursor({ batchSize: 10 }).exec();
  while ((user = await cursor.next())) {
    let savedUser = await User.updateOne(
      {  _id: user._id },
      { $set: { rowNumber: rowNumber   } }
    );
  }
 

Ответ №1:

MongoDB имеет bulkWrite функциональность только для этой цели.

 const users = await User.find().exec();
const writeOperations = users.map((user, i) => {
  return {
    updateOne: {
      filter: { _id: user._id },
      update: { rowNumber: i   1 }
    }
  };
});

await User.bulkWrite(writeOperations);