2017-09-25 4 views
4

Learning MongoDB pour les deux derniers jours et je suis en train de regrouper trois collections, mais incapables de réaliserMongoDB trois collections globales

Voici la collection de quatre maintenir dans la base de données

université

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

collège

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

départements

{ 
    "_id" : "5834ecf7432d92675bde9d84", 
    "department_name": "Fashion Technology", 
    "college_id" : "5834ecf7432d92675bde9d83" 
}, 
{ 
    "_id" : "5834ecf7432d92675bde9d85", 
    "department_name": "Merchandising", 
    "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" : "5834ecf7432d92675bde9d86", 
    "section_name": "A", 
    "students" : "55", 
    "department_id":"5834ecf7432d92675bde9d85" 
}, 
{ 
    "_id" : "5834ecf7432d92675bde9d87", 
    "section_name": "B", 
    "students" : "44", 
    "department_id":"5834ecf7432d92675bde9d85" 
} 

Ici, je suis en train d'atteindre la sortie dans le format ci-dessous

de sortie prévue

[{ 
    "_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" 
      } 
     ] 
    } 
    ] 
}] 

Mais, je reçois département et sections dans des réseaux séparés pour le collège, mais pas en mesure d'obtenir comme dans le format ci-dessus

Recherche

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"} 
     } 
     ]) 

Quelqu'un peut-il me aider à résoudre ce question, ce sera très utile pour moi.

Répondre

2

Vous pouvez essayer la requête d'agrégation ci-dessous.

La requête ci-dessous pousse le sections en department lorsqu'ils sont joints et $group pour pousser le département à créer la structure finale.

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" 
     } 
    } 
    } 
]) 
+1

Merci @Veeram Cela fonctionne. Je suis également face à un autre problème, il ya une entrée au collège et aucun département et entrée de section pour ce collège, Dans ce cas, pas en mesure d'obtenir cette entrée de collège seul dans la requête ci-dessus. Je mesure d'obtenir que si le Collège a Entrées de –

+0

{ « dérouleur $ »: { « chemin »: « départements $ », « preserveNullAndEmptyArrays »: true} }, je mettre à jour le dérouleur pour correspondre à vide et il fonctionne , @Veeram pls mettre à jour le même Merci pour votre temps, il vraiment utile et appris nouveau –

+0

et si vous voulez commencer à l'université et non au collège? – JenuRudan