ms-dred
@ms-dred
Вечно что то не то и что то не так...

Как правильно обновлять большое количество документов mongodb?

Может кто подскажет по проблеме.
Необходимо каждый день по крону обходить порядка 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 минут.

Может быть есть еще варианты более правильные и менее затратные?
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
@RidgeA
думаю наиболее правильным вариантом будет использовать bulk операции https://docs.mongodb.com/manual/reference/method/B...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы