У меня есть коллекция, содержащая от 100 000 до 1 миллиона документов.Для простоты, давайте рассмотрим, что у каждого документа есть эти минимальные свойства с примерами значений
user_id: 'objectId_user_1',
game_id: 'game_id_1',
selection: [
{name: 'A', _id:'objectId_A'},
{name: 'B', _id:'objectId_B'}
] // array will have size 10
Теперь, основываясь на их выборе объекта, мне нужно запустить функцию, которая вычисляет оценку с использованием внешних данных, подобных этой.
{
objectId_A: 123,
objectId_B: 50,
objectId_C: 77,
....
objectId_Z: 40
}
Так как у каждого будет отдельный массив selection
, таким образом, score
также будет отличаться.Мне нужно сохранить это значение score
в соответствующем документе.
после обновления каждый документ будет выглядеть следующим образом:
user_id: 'objectId_user_1',
game_id: 'game_id_1',
selection: [
{name: 'A', _id:'objectId_A'},
{name: 'B', _id:'objectId_B'}
],
score: 385,
processed: true
Как я могу сделать это эффективно.Можно ли это сделать с помощью агрегированного запроса?
Я могу подумать о получении данных в пакетном режиме и обработке, а затем об обновлении с использованием node-schedule
.Но я надеюсь, что есть лучшие решения.
Каждый документ имеет размер ~ 1,8 КБ. Мой сервер монго относительно мал (~ 2 ГБ ОЗУ, 100 ГБ памяти)
Не знаюне возражаете, если все это займет 20-30 минут для обработки