MongoDB для использования Sharding с оператором агрегирования $lookup

$lookup является новым в MongoDB 3.2. Он выполняет левое внешнее соединение с незащищенной коллекцией в той же базе данных для фильтрации в документах из "объединенной" коллекции для обработки.

Чтобы использовать $lookup, коллекция from не может быть отложена.

С другой стороны, ошпаривание - полезный подход к масштабированию по горизонтали.

Как лучше всего использовать их вместе?

Ответы

Ответ 1

Как указывается в предложении, которое вы указываете, вы не можете использовать $lookup в собранной коллекции. Поэтому оптимальным решением является выполнение поиска в отдельном запросе.

  • Выполните запрос aggregate.
  • Извлеките значения localField из результатов запроса в массив, возможно используя Array#map.
  • Выполните запрос find к коллекции "from", используя запрос типа {foreignField: {$in: localFieldArray}}
  • Объедините результаты в любой формат, который вам нужен.

Не позволяйте ограничению $lookup останавливать вас от создания коллекций, требующих масштабирования, просто выполните функцию поиска.