我有一個學校的作業,我必須在其中檢索有 x 次未通過測驗的學生串列。
一個學生有一個像這樣的一個學生計劃的模式
失敗的測驗是指學生在課程中的得分低于 10。
這里的數量是前端給出的失敗次數(失敗次數必須大于這個數量)
這就是我所擁有的,但顯然它不起作用。我只是不知道如何檢查失敗測驗的數量是否大于“數量”
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]}}}
]);
uj5u.com熱心網友回復:
幸運的是,您的架構在一個陣列中包含每個學生的所有課程 分數。所以你需要做的不是$group(因為每個檔案都是唯一的學生 ID),而是$filter在courses陣列上,只保留score少于 10 的那些。之后,你將$match在$size過濾后的陣列上等于amount. 因為這是家庭作業,我會把它留在那里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/378963.html
標籤:MongoDB 猫鼬 mongodb-查询 聚合框架 猫鼬模式
