уникальное обновление миллионов документов mongodb в пакете - node.js - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть коллекция, содержащая от 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 минут для обработки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...