【问题标题】:How i get an array containing the value of mongodb field every 15 minutes我如何每 15 分钟获取一个包含 mongodb 字段值的数组
【发布时间】: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 分钟查询一次集合。

标签: javascript node.js mongodb mongoose aggregation-framework


【解决方案1】:

根据您的要求,一个选项可以是:

  • 使用在您的应用程序中触发端点的 cron 作业 (https://cron-job.org/en/)。端点将查询数据库以查看商店在特定时间是否营业。 Cron 作业使您可以灵活地在一天中的特定时间间隔安排 cron 作业,在您的情况下是 9 - 2,并且还指定它每 15 分钟触发一次。

如果要聚合所有结果,则需要将所有单独的查询结果进一步存储在持久内存中,然后再进行聚合。

【讨论】:

    猜你喜欢
    • 2021-04-06
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    相关资源
    最近更新 更多