Mongodb查询数组上的条件

时间:2017-03-18 10:18:42

标签: mongodb

我有一个学生列表,其中包含得分对象数组,例如:

{
        "_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}}]});

但它不适用于单一条件。

非常感谢任何帮助。

1 个答案:

答案 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}}}}
    ]
}