Как найти массив, который хранится в другом массиве с Mon goose? - PullRequest
1 голос
/ 12 февраля 2020

У меня есть модель, которая выглядит следующим образом:

{
    "name" : "test",
    "modules" : [ 
        {
            "moduleName" : "Module 1",
            "chapters" : [ 
                {
                    "chapterName" : "Chapter 1",
                    "questions" : [ 
                        {
                            "title" : "Is this a question?",
                            "answers" : [ 
                                {
                                    "answer" : "Yes"
                                }, 
                                {
                                    "answer" : "No"
                                }, 
                                {
                                    "answer" : "Maybe"
                                }
                            ],
                        }
                    ]
                }
           ]
       }
   ]
}

Теперь я хотел бы получить все значения, которые включает в себя указанный массив глав c. Так, например, я хочу, чтобы все, что хранится в массиве главы, называлось «Глава 1». Есть ли плавный способ добиться этого?

1 Ответ

1 голос
/ 13 февраля 2020

Вам нужно запустить $ unwind , чтобы получить каждую главу как отдельный документ, но прежде чем вы сможете запустить $ match , чтобы отфильтровать как можно больше документов. Тот же $ match можно запустить еще раз, чтобы сохранить только Chapter 1 вложенных документов после $unwind. На последнем шаге вы можете использовать $ replace Root для продвижения вашей главы до уровня root:

db.collection.aggregate([
    {
        $match: { "modules.chapters.chapterName": "Chapter 1" }
    },
    {
        $unwind: "$modules"
    },
    {
        $unwind: "$modules.chapters"
    },
    {
        $match: { "modules.chapters.chapterName": "Chapter 1" }
    },
    {
        $replaceRoot: { newRoot: "$modules.chapters" }
    }
])

Пн go Детская площадка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...