Mongodb: 我如何检查一个计数是否小于一个值

Mongodb: How can i check if a count is smaller than a value

我有一份学校作业,我必须在其中检索有 x 次未通过测试的学生列表。

一位学生有这样的模式 student scheme

未通过考试是指学生在一门课程中的分数低于 10。

这里的数量是前端给出的失败数量(失败次数必须大于这个数量)

这就是我所拥有的,但显然它不起作用。我只是不知道如何检查失败测试的数量是否大于 'amount'

 let amount = 1
    let students = await Student.aggregate([
        {
            $group: {
                _id: '$studentNr',
                count: {"$sum": amount}
            }
        },
        {
            $match: {
                count: {
                    'courses.score':{$lt: 10}
                }
            }
        }
    ]);

提前致谢

回答

多亏了 Buzz Moschetti,我才找到了正确的答案。

    let amount = parseInt(req.body.amount);
    let students = await Student.aggregate([
        {
            $project: {
                name: "$name",
                studentNr: "$studentNr",
                courses: {
                    $filter: {
                        input: "$courses",
                        as: "course",
                        cond: {$lt: ["$$course.score", 10]}
                    }
                }
            }
        },
        {$match: {$expr: {$gt: [{$size:'$courses'}, amount]}}}
    ]);

幸运的是,您的模式具有数组中每个学生的所有课程+分数。所以你需要做的不是 $group (因为每个文档都是唯一的学生 ID)而是 courses 数组上的 $filter 并且只保留 score 小于10. 之后,您将 $match 在过滤数组的 $size 上等于 amount。因为这是作业,所以我就把它留在那里。