【问题标题】:Combining $elemMatch and $ in mongodb projection在 mongodb 投影中结合 $elemMatch 和 $
【发布时间】:2015-05-26 03:33:18
【问题描述】:

我的 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)? 我知道如何展示所有大于 80 的成绩,使用 $elemMatch 进行投影,或者如何只展示一年级,使用 '$' 运算符,但我如何将它们结合起来选择其中的第一个?

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    你可以使用aggregation pipeline

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-21
      • 2014-07-04
      • 1970-01-01
      • 2023-04-09
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      相关资源
      最近更新 更多