【问题标题】:Mongo Aggregate - Calculating based on datesMongo Aggregate - 根据日期计算
【发布时间】:2020-02-27 01:44:02
【问题描述】:

这是一个示例文档。

{"_id":{"$oid":"5e557779ed588826d84cef11"},
"meter_id":"1001",
"date":{"$date":{"$numberLong":"1509474600000"}},
"parameter_name":"hvac","voltage":{"unit":"V"},
"current":{"unit":"AMP"},
"powerFactor":{"unit":"phi"},
"angle":{"unit":"degree"},
"activePower":{"unit":"kwh"},
"reactivePower":{"unit":"kwh"},
"apparentPower":{"unit":"kwh"},
"frequency":{"unit":"hz"},
"thd":{"unit":"percentage"},
"energy":{"Energy":"5.7"},
"power":{"unit":"watt"},

大约有 100 000 个文档。我想过滤掉日期大于我指定日期的文档并计算总能量,即energy.Energy

我使用了以下聚合,但它似乎不起作用

const endDate = new Date(12-12-2018)
 MeterData.aggregate([
      {
          $group: {
              _id: "$meter_id",
              total: { $sum: 1 },
              totalEnergy: { $sum: { $toDouble: "$energy.Energy"
                   } },
                   dateSum: {
                    $sum: {
                      $toDouble: {
                        $not: [{
                          $cond: {
                            if: {
                              $gte: [
                                "$date", endDate
                              ]
                            },
                            then: "$energy.Energy",
                            else: 0
                          }
                        }

                        ]


                    }
                    }
                   }
          }
      }
  ])

【问题讨论】:

  • 不应将数值存储为文本。

标签: node.js angular mongodb


【解决方案1】:

会是这样的:

db.collection.aggregate([
   { $match: { date: { $gte: ISODate("2016-12-12") } } },
   {
      $group: {
         _id: "$meter_id",
         total: { $sum: 1 },
         totalEnergy: { $sum: "$energy.Energy" }
      }
   }
])

Mongo playground

【讨论】:

  • ISODate 没有在 mongo 中定义,如果我使用 new Date() 它没有给出预期的结果,有什么解决方法吗?
  • new Date("2016-12-12") 也应该可以工作。或者试试new Date(2018, 12, 12),或者new Date("2016-12-12T00:00:00Z")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多