小编etr*_*t81的帖子

不在的Mongodb聚合查询

我有一个学生列在一个集合中,他们的成绩在另一个集合中.架构(剥离其他细节)看起来像

学生们

{
     _id: 1234,
    student: {
        code: "WUKD984KUK"
    }
}
Run Code Online (Sandbox Code Playgroud)

等级

{
    _id: 3456,
    grade: 24,
    studentCode: "WUKD984KUK"
}
Run Code Online (Sandbox Code Playgroud)

每个学生可以有多个成绩条目.我需要在成绩表中但不在学生表中的学生总数.我还需要为不在学生表中的每个学生计算成绩.以下是我写的查询,

var existingStudents = db.students.find({}, {_id: 0, 'student.code': 1});

db.grades.aggregate(
    {$match: { 'studentCode': {'$nin': existingStudents}}},
    {$group: {_id: '$studentCode', count:{$sum: 1}}}, 
    {$project: {tmp: {code: '$_id', count: '$count'}}}, 
    {$group: {_id: null, total:{$sum:1}, data:{$addToSet: '$tmp'}}} 
);
Run Code Online (Sandbox Code Playgroud)

但这会将我的所有学生详细信息返回给我,就像比赛不起作用一样.当我只运行此查询的第一部分时,我将学生详细信息作为

{ "student" : { "code" : "A210225504104" } }
Run Code Online (Sandbox Code Playgroud)

我觉得因为返回值是两个深,所以匹配不起作用.得到这个的正确方法是什么?

mongodb aggregation-framework

6
推荐指数
1
解决办法
6007
查看次数

标签 统计

aggregation-framework ×1

mongodb ×1