Что делать, если вы хотите начать с университета, а не колледжа?

ю MongoDB за последние два дня, и я пытаюсь объединить три коллекции, но не могу этого достичь

Ниже приведены четыре коллекции, ведущие в базе данных

Университет

{
   "_id" : "5834ecf7432d92675bde9d82",
   "name": "NIFT"
}

колледж

{
   "_id" : "5834ecf7432d92675bde9d83",
   "name": "NIFT Hyderabad",
   "university_id":"5834ecf7432d92675bde9d82"
}

ведомства

{
   "_id" : "5834ecf7432d92675bde9d84",
   "department_name": "Fashion Technology",
   "college_id" : "5834ecf7432d92675bde9d83" 
},
{
   "_id" : "5834ecf7432d92675bde9d85",
   "department_name": "Merchandising",
   "college_id" : "5834ecf7432d92675bde9d83"
}

Разделы

{
   "_id" : "5834ecf7432d92675bde9d86",
   "section_name": "A",
   "students" : "56",
   "department_id":"5834ecf7432d92675bde9d84"
},
{
   "_id" : "5834ecf7432d92675bde9d87",
   "section_name": "B",
   "students" : "60",
   "department_id":"5834ecf7432d92675bde9d84"
},
{
   "_id" : "5834ecf7432d92675bde9d86",
   "section_name": "A",
   "students" : "55",
   "department_id":"5834ecf7432d92675bde9d85"
},
{
   "_id" : "5834ecf7432d92675bde9d87",
   "section_name": "B",
   "students" : "44",
   "department_id":"5834ecf7432d92675bde9d85"
}

Здесь я пытаюсь добиться вывода в следующем формате

Ожидаемый результат

[{
   "_id": "5834ecf7432d92675bde9d83",
   "name": "NIFT Hyderabad",
   "university_id": "5834ecf7432d92675bde9d82",
   "departments": [{
        "_id": "5834ecf7432d92675bde9d84",
        "department_name": "CSE",
        "college_id": "5834ecf7432d92675bde9d83",
        "sections": [{
            "_id": "5834ecf7432d92675bde9d86",
            "section_name": "A",
            "students": "56",
            "department_id": "5834ecf7432d92675bde9d84"
        }, {
            "_id": "5834ecf7432d92675bde9d87",
            "section_name": "B",
            "students": "60",
            "department_id": "5834ecf7432d92675bde9d84"
        }]
    },
    {
        "_id": "5834ecf7432d92675bde9d85",
        "department_name": "Mechanical",
        "college_id": "5834ecf7432d92675bde9d83",
        "sections": [{
                "_id": "5834ecf7432d92675bde9d86",
                "section_name": "A",
                "students": "55",
                "department_id": "5834ecf7432d92675bde9d85"
            },
            {
                "_id": "5834ecf7432d92675bde9d87",
                "section_name": "B",
                "students": "44",
                "department_id": "5834ecf7432d92675bde9d85"
            }
        ]
    }
  ]
}]

Но я получаю отдел и разделы в отдельных массивах для колледжа, но не могу получить как в вышеуказанном формате

запрос

db.college.aggregate([
            {"$match": { "university_id": "5834ecf7432d92675bde9d82" } },
            {"$lookup": {
            "localField": "_id",
            "from": "departments",
            "foreignField": "college_id",
            "as": "departments"
        }},
        {"$unwind":"$departments"},
        {$group : {_id : "$_id", departments : {$push : "$departments" }}},
        {"$lookup": {
        "localField": "departments._id",
        "from": "sections",
        "foreignField": "department_id",
        "as": "sections"}
        }
        ])

Может ли кто-нибудь помочь мне решить эту проблему, это будет очень полезно для меня.

Ответы на вопрос(1)

Решение Вопроса

Приведенный ниже запрос выдвигаетsections вdepartment когда они соединены и$group подтолкнуть отдел, чтобы создать окончательную структуру.

db.college.aggregate([
  {
    "$match": {
      "university_id": "5834ecf7432d92675bde9d82"
    }
  },
  {
    "$lookup": {
      "localField": "_id",
      "from": "departments",
      "foreignField": "college_id",
      "as": "departments"
    }
  },
  {
   "$unwind": {
     "path": "$departments",
     "preserveNullAndEmptyArrays": true
    }
  },
  {
    "$lookup": {
      "localField": "departments._id",
      "from": "sections",
      "foreignField": "department_id",
      "as": "departments.sections"
    }
  },
  {
    "$group": {
      "_id": "$_id",
      "name": {
        "$first": "$name"
      },
      "university_id": {
        "$first": "$university_id"
      },
      "departments": {
        "$push": "$departments"
      }
    }
  }
])
 Nagaraj ks26 сент. 2017 г., 09:52
{"$ unwind": {"path": "департаменты", "preserveNullAndEmptyArrays": true}}, я обновил раскрутку до совпадения пустого, и это работает, @Veeram, пожалуйста, обновите. Спасибо за ваше время, Это действительно полезно и узнал новое
 Nagaraj ks26 сент. 2017 г., 09:38
Спасибо @Veeram Это работает. Я также сталкиваюсь с еще одной проблемой: в колледже есть запись, и для этого колледжа нет отделов и записей о секциях. В этом случае невозможно получить эту запись в колледже в приведенном выше запросе. Я могу получить, только если в колледже есть записи на кафедры
 JenuRudan16 янв. 2018 г., 11:31
Что делать, если вы хотите начать с университета, а не колледжа?

Ваш ответ на вопрос