#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);