问答

mongodb 不同field的sub-document元素求和

作者:admin 2021-09-30 我要评论

我有一些按照小时时间统计的数据: { "name": "张三", "hour": { "0": { "num": 11 }, "1": { "num": 12 }, ...},{ "name": "李四", "hour": { "0": { "num": 21...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

我有一些按照小时时间统计的数据:

{
  "name": "张三",
  "hour": {
    "0": {
      "num": 11
    },
    "1": {
      "num": 12    
    },
    ...
},
{
  "name": "李四",
  "hour": {
    "0": {
      "num": 21
    },
    "1": {
      "num": 22  
    }
    ...
}
...

想把"0"--"9"十个时间点所有人的num数加起来,该如何操作?
即例子中的:(11+12+...) + (21+22+...)+...
或(11+21+...)+ (12+22+...)+...

###

可以用mapReduce做,map里用固定值作为key,并计算单个人十个时间点的总和作为value;reduce里再进行所有人的求和。

db.collection.mapReduce(function(){
    const hourDict = this.data.hour;
    const personSum = hourDict.0.num + hourDict.1.num + ...;
    emit('allHours', personSum);
}, function(key, values){
    return Array.sum(values)
}, {
    out: 'total'    
})
###

MongoDB是不适合做计算这个场景,你可以增加一个统计字段,每更新num数就把他+上,这样做效率是很低的

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • mongodb  不同field的sub-document元素

    mongodb 不同field的sub-document元素

  • vue-element-admin 4.2.1版本 post请求

    vue-element-admin 4.2.1版本 post请求

  • gitlab-ci中runner运行基础job的镜像如

    gitlab-ci中runner运行基础job的镜像如

  • C语言算术运算符的结合性

    C语言算术运算符的结合性

腾讯云代理商
海外云服务器