Вложенные отношения MongoDb - PullRequest
0 голосов
/ 02 мая 2020

Мне нужна помощь. У меня есть 2 коллекции MongoDB, о которых я хочу рассказать. Один для категорий, а другой для мультимедийного контента. Категория может содержать один мультимедийный контент и много дочерних категорий.

После выполнения агрегации путем прохождения конвейера я получаю возвращенный формат (см. Изображение 1): элементы мультимедиа в категориях Category.Media и дочерние элементы в Category.Childs. Моя проблема в том, что я не знаю, как я могу снова вставить медиа в дочерние категории (см. Изображение 2)

Я также оставляю ниже используемого конвейера.

Возвращенный результат:

MongoDB Nested Relations

Ожидаемый результат: MongoDb double Nested Relations

Трубопровод:

[
    {
        "$match": {
            "id_site": 3,
            "id_parent": null,
            "id_class": null
        }
    },
    {
        "$lookup": {
            "from": "categories",
            "localField": "_id",
            "foreignField": "id_parent",
            "as": "Childs"
        }
    },
    {
        "$lookup": {
            "from": "media",
            "localField": "id_media",
            "foreignField": "_id",
            "as": "Media"
        }
    }
]

Спасибо заранее. Любое предложение приветствуется.

1 Ответ

0 голосов
/ 06 мая 2020

Вам придется изменить первый $lookup, чтобы использовать конвейер (доступно из версии 3.6)

[
    {
        "$match": {
            "id_site": 3,
            "id_parent": null,
            "id_class": null
        }
    },
    {
        "$lookup": {
            "from": "categories",
            "let": {
                "cid": "$_id"
            },
            "pipeline": [
                {
                    "$match": {
                        "$expr": { $eq: ["$id_parent", "$$cid"] }
                    }
                },
                {
                    "$lookup": {
                        "from": "media",
                        "localField": "id_media",
                        "foreignField": "_id",
                        "as": "Media"
                    }
                }
            ],
            "as": "Childs"
        }
    },
    {
        "$lookup": {
            "from": "media",
            "localField": "id_media",
            "foreignField": "_id",
            "as": "Media"
        }
    }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...