Using mongodb with NodeJS driver

我有两个系列.一个给系里,另一个给学生.

Deparmtent的示例数据.

{ 
 "_id" : ObjectId("5a24d20590d3d12155f3094e"), "name" : "CSE", "hod" : 
 "abc", 
 "students" : [ 
  ObjectId("5a2129172c3e542acb78c1f5"),
  ObjectId("5a2129172c3e542acb78c1f7"), 
  ObjectId("5a2129172c3e542acb78c1f9"), 
  ObjectId("5a2129172c3e542acb78c1fb")
 ]
}

{
 "_id" : ObjectId("5a24d20590d3d12155f3094f"), 
 "name" : "IT", 
 "hod" : "xyz", , 
 "students" : [ 
  ObjectId("5a2129172c3e542acb78c1f6"),
  ObjectId("5a2129172c3e542acb78c1f8"), 
  ObjectId("5a2129172c3e542acb78c1fa"),
  ObjectId("5a2129172c3e542acb78c1fc") 
 ] 
}

以及学生的样本数据

{
    "_id" : ObjectId("5a2129172c3e542acb78c1f4"),
    "rollNumber" : 11,
    "name" : "Thor",
    "branch" : ObjectId("5a24d20590d3d12155f3094e"),
}

以下是问题:

aggregate([
   {$lookup: 
     { from: "students", 
       localField: "_id", 
       foreignField: "branch", as: "studentData"
     }
   }
])

查询的输出

[ 
  { _id: 5a24d20590d3d12155f3094e,
    name: 'CSE',
    hod: 'abc',
    studentData: [ [Object], [Object], [Object], [Object], [Object] ] 
  },
  { _id: 5a24d20590d3d12155f3094f,
    name: 'IT',
    hod: 'xyz',
    studentData: [ [Object], [Object], [Object], [Object] ] } 
]

我有两个问题

  1. 如何打印完整的学生数据.
  2. 如何获取每个系的学生数据计数

推荐答案

To get complete student data you can do something like

db.student.aggregate(
        [
            {
            $lookup:
                {
                    from:"department",
                    localField:"branch",
                    foreignField:"_id",
                    as:"branch"
                }
            }
        ]
    )

这会给你类似的东西:

{
    "_id" : 1.0,
    "rollNumber" : 110.0,
    "name" : "Thor",
    "branch" : [ 
        {
            "_id" : 1.0,
            "name" : "CSE",
            "hod" : "abc"
        }
    ]
}

To get the count of studentData for each Department

db.getCollection('student').aggregate(
    [
        {
        $lookup:
            {
                from:"department",
                localField:"branch",
                foreignField:"_id",
                as:"branch"
            }
        },
        {
            $group:
            {
                _id:"$branch",
                "numOfStudent":{$sum:1},
                "listOfStudents":{$push:"$name"}
            }
        }
    ]
)

这会给你类似的东西:

{
    "_id" : [ 
        {
            "_id" : 2.0,
            "name" : "IT",
            "hod" : "xyz"
        }
    ],
    "numOfStudent" : 1.0,
    "listOfStudents" : [ 
        "Ironman2"
    ]
}
{
    "_id" : [ 
        {
            "_id" : 1.0,
            "name" : "CSE",
            "hod" : "abc"
        }
    ],
    "numOfStudent" : 3.0,
    "listOfStudents" : [ 
        "Thor", 
        "Ironman", 
        "Ironman3"
    ]
}

如果你想存储学生的ID而不是他们的名字,你可以将$push:$name改为$push:$_id.

EDIT

db.department.aggregate([
{
    $lookup:
                {
                    from:"student",
                    localField:"students",
                    foreignField:"_id",
                    as:"studentsDetails"
                }
},
{
    $project:{
            _id:0,
            name:"$name",
            hod:"$hod",
            numOfStudents:{$size:"$studentsDetails"},
            students:"$studentsDetails"
        }
}
])

这会给你类似的东西:

{
    "name" : "CSE",
    "hod" : "abc",
    "numOfStudents" : 2,
    "students" : [ 
        {
            "_id" : 1.0,
            "rollNumber" : 110.0,
            "name" : "Thor",
            "branch" : 1.0
        }, 
        {
            "_id" : 3.0,
            "rollNumber" : 111.0,
            "name" : "Ironman2",
            "branch" : 2.0
        }
    ]
}

Mongodb相关问答推荐

MongoDB:从集合页面数据中提取不同的值

如何限制/筛选子文档中的条目?

如何在MongoDB中对两个数组进行分组?

lexik_jwt_authentication下无法识别的选项api_platform

在 Heroku 上使用 Node 读取、写入和存储 JSON

在 MongoDb 中查询小于 NOW 的日期时间值

如何在 MongoDB 中进行内部连接?

$lookup 结果 mongodb 的计数

如何使用 mongodb 和 php 正确处理分页查询?

spring-data-mongo - 可选查询参数?

Mongoose 中不同集合的相同模式

带有 jQ​​uery Ajax/JSON 前端的 MongoDB 或 CouchDB 中间件

MongoDB - 我如何找到另一个集合中的文档未引用的所有文档

将 MongoCursor from ->find() 转换为数组

MongoDB的数据库管理工具

在 MongoDB 上分片 GridFS

在 MongoDB 上使用 $push 更新数组时避免重复值

MongoDB Compass timeouts超时

MongoDB:删除唯一约束

查找聚合性能差