Может кто подскажет по проблеме.
Необходимо каждый день по крону обходить порядка 100к+ документов, собирать информацию и обновлять их, сделано это с целью получения некого рейтинга документов.
По времени выполнения не столько критично, но хочется как то перебрать записи без больших нагрузок на сервер.
К примеру есть подготовленный массив данных скажем со 100к элементами
[
_id: ObjectId(....) // ID документа которой необходимо обновить
popular: {
day: 1230 // Поле которое необходимо создать
}
]
Я использую для всего этого async/await с примерно такой функцией обновления документов
function isPopularToDay(request) {
return Promise.all(request.map(async e => {
return Collections.updateOne({ _id: e._id }, { $set: { "popular.day": e.count } }).then()
}))
}
Пока было немного документов (порядка 10к) то все было норм, но теперь документов требующих изменений куча, да и хотелось бы не раз в сутки обновлять данные, а каждые часа 2-3, но нагрузки не позволяют.
Сейчас думаю в сторону .reduce() растянуть все выполнение на 10-20 минут.
Может быть есть еще варианты более правильные и менее затратные?