Я искал в Интернете и StackOverflow, но не могу найти ответ или даже вопрос.
У меня есть две коллекции, reports
и users
. Я хочу, чтобы мой запрос возвратил все отчеты и указал, есть ли у указанного пользователя этот отчет в качестве избранного в их массиве.
Сборник отчетов
{ _id: 1, name:"Report One"}
{ _id: 2, name:"Report Two"}
{ _id: 3, name:"Report Three"}
Коллекция пользователей
{_id: 1, name:"Mike", favorites: [1,3]}
{_id: 2, name:"Tim", favorites: [2,3]}
Желаемый результат для users.name = "Mike"
{ _id: 1, name:"Report One", favorite: true}
{ _id: 2, name:"Report Two", favorite: false}
{ _id: 3, name:"Report Three", favorite: true}
Все ответы, которые я могу найти, используют $ unwind для локального (reports
) поля, но в этом случае локальное поле не является массивом. Внешнее поле - это массив.
Как я могу раскрутить чужое поле? Есть ли лучший способ сделать это?
Я видел в Интернете, что кто-то предложил создать еще одну коллекцию favorites
, которая будет содержать:
{ _id: 1, userId: 1, reportId: 1 }
{ _id: 2, userId: 1, reportId: 3 }
{ _id: 3, userId: 2, reportId: 2 }
{ _id: 4, userId: 2, reportId: 3 }
Похоже, этот метод должен быть необычным. Должно быть просто присоединиться к идентификатору во внешнем массиве, верно?