mongodb - 如何求数组内所有元素的总和

标签 mongodb sum mongodb-query aggregation-framework

好的,我有一个如下所示的对象集合:

{  
 "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 新手,如果问题重复,我很抱歉,但我没有找到任何有用的东西。

最佳答案

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

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

关于mongodb - 如何求数组内所有元素的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54405777/

相关文章:

mongodb - 如何恢复压缩的 Mongodb 单个集合?

node.js - 在 Mongoose 中调用 modal.countDocuments() 和 modal.count() 时抛出错误

mongodb - 如何替换mongodb中所有匹配的子字符串

SQL Max(something,0) 类型解决方案

sql - 具有空值的外部连接表的累积和

mongodb - 使用 MongoDB 投影来嵌套整个文档?

Golang官方驱动中的MongoDB连接池

c# - MongoDb/C# 过滤并获取所有子文档

R 按索引(日期)对多个数据帧的列表求和

javascript - 对子文档数组进行 elemMatch 搜索