@Young_nigilist

Как объединить 3 коллекции MongoDB?

У меня есть 3 коллекции:

Restaurants
RaUDF.png

Menu
mJxMo.png

Products
ITXBI.png

ID продуктов находятся в Menu; ID меню находятся в Restaurants.
Как вывести такой документ?
{
   ...
   menu:[{
           _id
           name
           products:[{
                 _id
                 name
                 ...
           }, ...]
   }, ...]
 ...


Я написал такой запрос:
const restaurant = await Restaurant.aggregate([
    {
        "$match": { _id: ObjectId(req.params.id) }
    },
    {
        "$lookup": {
            "from": "menus",
            "localField": "menu",
            "foreignField": "_id",
            "as": "menu",
        }
    },
    {
        "$lookup": {
            "from": "products",
            "localField": "menu.products",
            "foreignField": "_id",
            "as": "menu.products"
        }
    },
])

Но он не выводит название меню.
  • Вопрос задан
  • 564 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Young_nigilist Автор вопроса
Получилось сделать так:
const restaurant = await Restaurant.aggregate([
        {
            "$match": { _id: ObjectId(req.params.id) }
        },
        {
            "$lookup": {
                "from": "menus",
                "localField": "menu",
                "foreignField": "_id",
                "as": "menu",
            }
        },
        { "$unwind": { "path": "$menu", "preserveNullAndEmptyArrays": true } },
        {
            "$lookup": {
                "from": "products",
                "localField": "menu.products",
                "foreignField": "_id",
                "as": "menu.products"
            }
        },
        {
            "$group": {
                "_id": "$_id",
                "name": { "$first": "$name" },
                "hours": { "$first": "$hours" },
                "image": { "$first": "$image" },
                "phones": { "$first": "$phones" },
                "takeAway": { "$first": "$takeAway" },
                "description": { "$first": "$description" },
                "address": { "$first": "$address" },
                "user": { "$first": "$user" },
                "menu": { "$push": "$menu" }
            }
        }
    ])
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы