【问题标题】:MongoDB query find the maximum value of the last two daysMongoDB查询查找最近两天的最大值
【发布时间】:2019-12-14 17:39:09
【问题描述】:

如果我想从集合的所有记录中搜索最高温度,那么下面的查询是完美的

 db.posts3.aggregate([{$group:{ _id: "maximum",Temperature:{$max:"$Temperature"}}}]);

如果我想搜索最近两天的最高温度,mongo 查询不起作用。

    db.posts3.aggregate([{$group:
         { _id: "maximum",
            {"time":{"$gt": ISODate("2019-10-12T11:25:06.156Z"),
                      "$lt":ISODate("2019-12-12T11:25:07.156Z")}
            },
                Temperature:{$max:"$Temperature"}

          }
       }
    ]);

【问题讨论】:

    标签: mongodb mongoose mongodb-query


    【解决方案1】:

    将时间搜索移至$match 管道可能会解决您的问题:

    db.posts3.aggregate([
      {$match:
        {"time": {
          "$gt": ISODate("2019-10-12T11:25:06.156Z"),
          "$lt":ISODate("2019-12-12T11:25:07.156Z")}
        }
      },
      {$group:
         { 
           _id: "maximum",
           Temperature:{$max:"$Temperature"}
         }
      }
    ]);
    

    【讨论】:

    • 谢谢,上面的代码可以正常工作,但是如果温度在另一个集合中。甚至,我关注这个link
    【解决方案2】:

    以下聚合将获取最近 2 天内 dt 的 temp 字段的最大值。

    db.test.aggregate( [
      { 
          $match: { 
              $expr: { 
                  $gte:  [ "$dt", { $subtract: [ ISODate(), 2*24*60*60*1000 ] } ] 
              } 
          } 
      },
      { 
          $group: { 
              _id: null,
              maxTemp: { $max: "$temp" }
          }
      },
    ] )
    

    结果为@​​987654324@,输入文件如下:

    { "_id" : 1, "dt" : ISODate("2019-12-14T08:51:53.531Z"), "temp" : 12 }
    { "_id" : 2, "dt" : ISODate("2019-12-13T01:42:40.837Z"), "temp" : 13 }
    { "_id" : 3, "dt" : ISODate("2019-12-13T13:42:40.837Z"), "temp" : 14 }
    { "_id" : 4, "dt" : ISODate("2019-12-11T08:51:53.531Z"), "temp" : 15 }
    { "_id" : 9, "dt" : ISODate("2019-12-12T08:51:53.531Z"), "temp" : 16 }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2018-11-20
      • 2021-06-18
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多