gpt4 book ai didi

node.js - Mongoose 查询最近 24 小时内的文档,每小时仅查询一个文档

转载 作者:太空宇宙 更新时间:2023-11-03 23:22:27 25 4
gpt4 key购买 nike

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

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

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

我需要构建一个 Mongoose 查询,该查询将检索过去 24 小时内收集的测量结果,但每小时仅进行一次测量。通过设备测量的 5 分钟时间间隔,我每小时将创建 12 个文档。我只想每小时检索其中一个。

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

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

最佳答案

使用聚合

this is a great article了解如何对文档进行分组,然后为每个文档选择一个项目。

您还需要过滤过去 24 小时的文档,然后根据时间戳预测查找和小时

If you need, lets say, last 48 hours, you need to group by hour and day.

您的查询将是这样的

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com