结合$ elemMatch和$ in mongodb投影

时间:2015-03-23 07:40:55

标签: mongodb mongodb-query aggregation-framework

我的MongoDB集合中有以下文档:

{ "_id" : 1, "semester" : 1, "grades" : [ 70, 87, 90 ] }
{ "_id" : 2, "semester" : 2, "grades" : [ 90, 88, 92 ] }
{ "_id" : 3, "semester" : 1, "grades" : [ 85, 100, 90 ] }

我想检索与第一学期相匹配的所有文件,并为每个文件提供id字段,学期字段和大于80的第一年级。 即,对于上述文档,查询的结果应为:

{ "_id" : 1, "semester" : 1, "grades" : 87 }
{ "_id" : 3, "semester" : 1, "grades" : 85 }

这可能吗? 执行此操作的查询是什么(我使用MongoDB 2.6)? 我知道如何使用$ elemMatch进行投影,或者如何使用' $'来展示大于80的所有等级,使用$ elemMatch进行投影。运算符,但如何将它们组合起来选择第一个呢?

1 个答案:

答案 0 :(得分:2)

您可以使用aggregation pipeline

    db.collection.aggregate([
        { "$unwind": "$grades" }, 
        { "$match": 
            {
                "semester": 1, 
                "grades": { "$gt": 80 }
            }
        }, 
        { "$group": 
            { 
                "_id": "$_id", 
                "semester": { "$first": "$semester" }, 
                "grades": { "$first": "$grades" }
            }
        }
    ])