我正在编写一个应用程序,其中有一些天气传感器每5分钟将空气的温度和湿度发送到服务器。

我想画一张图表,说明温度和湿度如何变化,即在一夜之间。我的想法是根据过去24小时的数据绘制图表。

我自己无法弄清楚,所以我想也许可以在这里寻求帮助。当然,每个度量文档都有一个名为createdAt的字段,该字段具有创建日期的时间戳。

我需要构建一个猫鼬查询,该查询将检索最近24小时内收集的度量,但每小时仅进行一次度量。以5分钟的时间间隔和设备的测量值,我每小时将创建12个文档。我每小时只能检索其中一个。

到目前为止,我能够提出这个建议(使用gt来获取最近的24小时测量结果,不知道如何每小时仅获取一个文档):

Measurements.find({ "createdAt": { $gt: new Date(Date.now() - 24*60*60 * 1000) } })

最佳答案

使用汇总

this is a great article有关如何对文档进行分组,然后在每个文档中选择一项。

您还需要过滤过去24小时的文档,然后从时间戳中进行查找和hour投影。


  假设持续48小时,则需要按小时和天分组。


您的查询将是这样的

collection.aggregate([
  {
    "$filter": {
      "createdAt": { $gt: new Date(Date.now() - 24*60*60 * 1000) }
    }
  },
  {
    "$project": {
      "h": {"$hour" : "$createdAt"},
      "original_doc": "$$ROOT"
    }
  },
  {
    "$group": {
      "_id": { "hour": "$h" },
      "docs": { $push: "$original_doc" }
    }
  },
  {
    $replaceRoot: {
      newRoot: { $arrayElemAt: ["$docs", 0] }
    }
  }
])

关于node.js - Mongoose 最近24小时查询文件,每小时仅查询一个文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48244163/

10-15 23:54