Mongodb汇总了三个集合

时间:2017-09-25 10:44:06

标签: mongodb nosql mongodb-query aggregation-framework

过去两天学习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 个答案:

答案 0 :(得分:5)

您可以尝试以下聚合查询。

以下查询会在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" } } } ]) 以推动部门创建最终结构。

    <html>
    <script>
    var somevariable = "hi"; //this is the variable you create in JavaScript

    window.onload = function() {

       document.getElementById("blabla").innerHTML = somevariable; //here you send the value of 'somevariable' to html.
    } 
    </script>
    <body>
    <input type="text" id="blabla" name="someInput"></input>
    </body>
    </html>