我如何每 15 分钟获取一个包含 mongodb 字段值的数组
Posted
技术标签:
【中文标题】我如何每 15 分钟获取一个包含 mongodb 字段值的数组【英文标题】:How i get an array containing the value of mongodb field every 15 minutes 【发布时间】:2021-08-27 10:32:25 【问题描述】:我正在处理 node js mongodb 项目,我有一个名为 shop_infos 的集合,其中包含这样的文档:
"_id": ObjectId("80c0ba30f2ed8e3d886965c4")
"shopId":ObjectId("5e9f0d3418c486041c6f5e8a")
"isOpen": true,
"created_at": 2021-06-09T09:00:12.458+00:00
"updated_at": 2021-06-09T09:00:12.458+00:00
"_id": ObjectId("80c0ba30f2ed8e3d886965c4")
"shopId":ObjectId("5e9f0d3418c486041c6f5e8a")
"isOpen": false,
"created_at": 2021-06-09T11:00:12.458+00:00
"updated_at": 2021-06-09T11:00:12.458+00:00
因此,每次商店打开或关闭时,此集合都包含商店信息(是否打开),一个文档会插入到包含 shopId 且是否打开的此集合中。 我想做的是在一个选定的日子里从 9:00 到 12:00 每 15 分钟查看每家商店的状态。我想得到的输出是这个
"shopId", "date", "09:00", "09:15", "09:30", "09:45", "10:00", "10:15","10:30", "10:45", "11:00", "11:15", "11:30", "11:45", "12:00"
5e9f0d3418c486041c6f5e8a, 09/06/2021 ; true, true , true , true, true, true, true, true, false, false, false, false
5e9f0d3418c486041c6f5efd, 09/06/2021 ; true, true , true , true, true, true, true, true, true, true , true , true
所以这里我选择的日期是 09/06/2021,我可以在 $match 查询中进行,在数组的第一行,商店有两个信息文档 1- 它在 9:00 开放 2- 它是在 11:00 关闭,因此在 9 点到 11 点之间,isOpen 字段每 15 分钟为 true,然后从 11 到 12 为 false 第二个例子是随机的,告诉你我也应该按 id 对商店进行分组 我一直在尝试使用 mongodb 聚合来实现这一点,但我什至无法获得正确的结果,所以我开始怀疑这是否可以通过聚合来完成,如果不能,我如何使用节点 js 来完成?
【问题讨论】:
您可以使用 cron 作业根据提供的查询过滤器每 n 分钟查询一次集合。 【参考方案1】:根据您的要求,一个选项可以是:
使用在您的应用程序中触发端点的 cron 作业 (https://cron-job.org/en/)。端点将查询数据库以查看商店在特定时间是否营业。 Cron 作业使您可以灵活地在一天中的特定时间间隔安排 cron 作业,在您的情况下是 9 - 2,并且还指定它每 15 分钟触发一次。如果要聚合所有结果,则需要将所有单独的查询结果进一步存储在持久内存中,然后再进行聚合。
【讨论】:
以上是关于我如何每 15 分钟获取一个包含 mongodb 字段值的数组的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB 聚合错误:管道阶段规范对象必须只包含一个字段
mongoDB:$dateToString 格式以 15 分钟间隔显示时间