mongodb - 如何在 mongodb 中创建数据库结构以保存日期范围?

标签 mongodb go

我在这里使用 golang 保存日期范围。假设我们必须保存从 1-may-201814-july-2018 范围内的所有星期一。

我们如何使用 golang 找到这些范围之间的所有星期一,另一方面我们设置了 start_time(8:00 A.M.) 和数据库中前两个星期一的 end_time(6:00 P.M.),但在第三个星期一,我们的时间表发生了变化,有一个时间变化,如 start_time(9:00 A.M.)和 end_time(5:00 P.M.)。那么我将如何在实际使用 golang 时使我的数据库成为这种情况。

任何人都可以帮我解决这个问题吗?我为它创建了一个数据库,并对其进行了 ppr 工作,并创建了如下所示的一些字段:-

Fields for Schedule //Schedule is a collection name
 Id (int)
 Day (string)
 Start_hours (int)
 Start_minutes (int)
 End_hours (int)
 End_minutes (int)
 Start_date (timestamp)
 End_date (timestamp)

我将如何在所选范围内选择星期一,以及我将如何处理我上面解释的情况,任何人都可以指导我使这种情况变得更容易。谢谢,如果这是一个基本问题,那么我真的很抱歉。

最佳答案

我会做这样的事情。

  1. 从日期范围中查找第一个星期一日期(参见示例 How do I get the first Monday of a given month in Go?
  2. 每周都是星期一,因此您可以通过在结束日期前加上 7 天轻松找到其余日期
  3. 存储您找到的所有星期一日期以及开始时间和结束时间

我不会为小时和分钟而烦恼,因为您可以轻松地从 Go 中的时间戳中获取它们。这是我要制作的简化数据库结构

Fields for Schedule //Schedule is a collection name
 Id (int) 
 Day (string)
 Date (timestamp) // the actual date
 Start (timestamp)
 End (timestamp)

您不再需要任何字段。您也可以从日期字段中获取星期几(结构中的日期(字符串),例如星期一),但我相信如果您想按不同日期查询集合,这可能会加快速度,但要小心您需要调整时区。如果您使用多个时区,那么将所有内容都存储在 UTC 中,并且您可能有一个额外的时区归档,因为一个时区的日期可能是星期一,另一个时区的日期可能是星期日。

因此,日程安排将保留工作日以及每个工作日的开始和结束时间。我不确定您是否需要存储初始日期范围,Schedule 集合也将保留该范围,从第一条记录到最后一条记录。在我看来,我最初会用给定的日期范围填充集合,然后,我可以通过添加新的日期或删除它们来修改它。 当您使用 Date 字段的一些开始和结束日期范围查询此集合时,如果您的第一个结果比开始时晚 7 天,这意味着您从开始就错过了 1 个或多个条目。如果最后一个结果距离范围结束超过 7 天,这意味着您在范围结束之前错过了一些条目。

Go 没有什么特别之处,在我看来,Go 可以很好地处理日期,并且您的数据库中不需要任何特殊的日期结构。

关于mongodb - 如何在 mongodb 中创建数据库结构以保存日期范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50328188/

相关文章:

docker - 如何在子文件夹中使用 go.mod 构建 golang docker 镜像?

java - 以内存有效的方式计算 MongoDB(Java 驱动程序)中的唯一对象

c++ - Mongo C++ 批量操作

go - Golang中多接口(interface)转换的简洁方式?

go - 测试信号量实现时出错

go - 从服务器端语言设置为 localStorage

go - 构造奇怪的行为

mongodb - 一旦删除并重新创建索引,Elasticsearch不会自动提取现有的mongoDB数据

mongodb - 有没有办法将 MongoDB 与 TestCafe 一起使用?

c++ - MongoDB C++ 驱动程序 - 8 位和 16 位整数?