【问题标题】:How count e.g. ice days over month/years如何计算例如冰天数月/年
【发布时间】:2021-07-24 08:54:31
【问题描述】:

我有一个气象站,每 10 分钟有超过 14 年的数据:像这样

_id:60fbcf880000000000000000  
datum:2021-07-24T08:30:00.000+00:00  
temperature:19.5

现在我想计算每年和每月的某些天数。

  • 冰天(温度是 24 小时始终低于 0°),
  • 冬日(温度低于 0°)
  • 寒冷的日子(最高温度
  • 炎热的日子(最高温度 25-30°C)
  • 非常炎热的日子(最高温度超过 30°)。

我对 mongo 的最佳查询代码一无所知。 我可以分组几天,但是我遇到了计算这些特定日子的问题($buckets?)

我来直到分组:

{$group: {
  _id: [{$year: '$datum'},  <br>
  {$month: '$datum'},  <br>
  {$dayOfMonth: '$datum'}],  <br>
  temp_avg: {$avg: '$tempAussen'},  <br>
  temp_min: {$min: '$tempAussen'},  <br>
  temp_max: {$max: '$tempAussen'},  <br>
}} 

生成一个包含以下元素的列表:

_id:Array
0:2020  
1:3
2:2 
temp_avg:6.12  
temp_min:0.7  
temp_max:9.6  

但现在开始我的问题:如何计算温度

【问题讨论】:

标签: mongodb-query


【解决方案1】:

您的分组工作正常。您只需要按月再增加一个$group 就可以有条件地为每种类型的一天求和。例如,你可以这样做

{
    $group: {
      _id: {
        "year": "$_id.year",
        "month": "$_id.month",
        
      },
      winter_days_count: {
        $sum: {
          "$cond": {
            "if": {
              $lt: [
                "$temp_min",
                0
              ]
            },
            "then": 1,
            "else": 0
          }
        }
      }
      ...

计算该月的冬季天数。

这是Mongo playground 供您参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多