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
。因为这是作业,所以我就把它留在那里。
我有一份学校作业,我必须在其中检索有 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
。因为这是作业,所以我就把它留在那里。