Для начала выполним инициализацию:
Коллекция test - целевые сущности, коллекция t - связи между документами коллекции test, t.b и t.c - внешние ключи на test.a.
Получаем связи с помощью оператора $lookup:
Один запрос! Я потрясен :).
Смапим значения поля d - полученные с помощью оператора $lookup документы коллекции t - оставим значение поля c - ключа связи с документом коллекции test:
Развинтим массивы (значения поля d):
Обращаю внимание на использование новых фич оператора $unwind - если развинтить "по-стариковски", тогда потеряем документ, у которого в качестве значения поля d пустой массив:
Заменяем ключи (значения поля d) на массив документов коллекции test с помощью все того же оператора $lookup:
Вытаскиваем из массивов (значения поля d) первый (и единственный) элемент с помощью оператора $arrayElemAt:
Группируем, сортируем:
Вуаля! Можно заново проектировать хранение данных и переписывать серверную часть :)
Комментариев нет:
Отправить комментарий
Комментарий будет опубликован после модерации