首页 > 解决方案 > 如何对数组中的所有元素求和

问题描述

好的,所以我有一组看起来像这样的对象:

{  
 "address":{  
  "building":"1007",
  "coord":[  
     -73.856077,
     40.848447
  ],
  "street":"Morris Park Ave",
  "zipcode":"10462"
},
"borough":"Bronx",
"cuisine":"Bakery",
"grades":[  
  {  
     "date":{  
        "$date":1393804800000
     },
     "grade":"A",
     "score":2
  },
  {  
     "date":{  
        "$date":1378857600000
     },
     "grade":"A",
     "score":6
  },
  {  
     "date":{  
        "$date":1358985600000
     },
     "grade":"A",
     "score":10
  },
  {  
     "date":{  
        "$date":1322006400000
     },
     "grade":"A",
     "score":9
  },
  {  
     "date":{  
        "$date":1299715200000
     },
     "grade":"B",
     "score":14
  }
],
"name":"Morris Park Bake Shop",
"restaurant_id":"30075445"
}

这只是这些元素集合中的一个元素。如何编写 MongoDB 查询,以便获得总分大于70例如的餐厅?

我是 MongoDB 的新手,如果问题重复,我很抱歉,但我没有找到任何有用的东西。

标签: mongodbsummongodb-queryaggregation-framework

解决方案


您可以使用$reduce计算数组的总和并将其放入$expr,尝试:

db.col.aggregate([
    {
        $match: {
            $expr: {
                $gte: [ 
                    { $reduce: { input: "$grades", initialValue: 0, in: { $add: [ "$$value", "$$this.score" ] } } }, 
                    70 
                ]
            }
        }
    }
])

推荐阅读