我正在编写一个应用程序,其中有一些天气传感器每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/