【问题标题】:How to write aggregate function of mongo for the following condition如何为以下条件编写mongo的聚合函数
【发布时间】:2020-02-16 07:49:29
【问题描述】:

我在 mongo 中有一个集合,其中包含大约 50 万个文档,从中我想要一个具有特定 id 的特定字段的总和。

例如:

单个文档具有meter_id 和总功率字段。 所以我想分离具有相同仪表 ID 的文档,然后计算每个具有相同仪表 ID 的集合的总功率。

示例文档:

_id:5e444fc1c5e86c84d1044aeb
meter_id:"jhk"
date:2017-06-17T18:39:28.795+00:00
activePower:Object
unit:"kwh"
Active Power L1:"0"
Active Power L2:"0"
Active Power L3:"0"
Total Active Power:"5"
reactivePower:Object
apparentPower:Object
frequency:Object
thd:Object

现在我必须按仪表 ID 分组,并想要总有功功率字段的总和,这是有功功率对象的键值

预期输出:

{ _id: 'jhk', total: 69236, totalAmount:  }

【问题讨论】:

  • 显示到目前为止您尝试过的内容
  • 这能回答你的问题吗? Group by sum mongodb
  • @Dharmik soni :投票关闭它,因为上面的链接为您提供了您正在寻找的东西..
  • 不,它没有,它只是计算具有相同参数的文档数。但我也想得到其他参数的总和
  • 您能否用示例文档更新问题并描述预期的输出?目前您的问题还不清楚,如果您想得到答案,请努力解决您的问题。

标签: node.js mongodb mongoose aggregation-framework


【解决方案1】:

试试这个:

查询:

db.collection.aggregate([{$group :{_id : '$meter_id', total : {$sum : { $toInt : '$activePower.TotalActivePower'}}}}])

测试: MongoDB-Playground

注意:您的$activePower.TotalActivePower 字段似乎是一个字符串,如果是,那么我们需要使用$toInt 将其转换为数字,以便计算所有匹配文档的总和到 _id 标准。

【讨论】:

  • 感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2018-07-20
  • 2011-12-01
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多