【发布时间】: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