我有一个学生列表,其中包含得分对象数组,例如:
{
"_id" : ObjectId("58a6c4542d0de393d2739979"),
"student_id" : 0,
"scores" : [
{
"type" : "exam",
"score" : 76
},
{
"type" : "quiz",
"score" : 65
},
{
"type" : "homework",
"score" : 58
}
],
"class_id" : 438
}
我需要根据类型和相应的得分以及条件来收集学生
考试成绩大于60
在测验中得分大于50且
在作业中得分大于45
目前我正在尝试以下查询
db.students.find({$and: [{'scores.type': 'exam'}, {'scores.score': {$gt: 60}}]});
但它不适用于单一条件。
非常感谢任何帮助。
答案 0 :(得分:1)
您可以使用$and
创建此类查询,然后使用$elemMatch
和$gt
{
$and: [
{scores: {$elemMatch: {'type': 'exam','score': {$gt: 60}}}},
{scores: {$elemMatch: {'type': 'quiz','score': {$gt: 50}}}},
{scores: {$elemMatch: {'type': 'homework','score': {$gt: 45}}}}
]
}