【问题标题】:MongoDb: Best way to store time rangeMongoDb:存储时间范围的最佳方式
【发布时间】:2020-10-25 14:29:03
【问题描述】:

我需要在我的文档中存储 startTime 和 endTime 之类的内容。为了提供更多背景信息,这些将反映商店的营业时间和关闭时间。因此,例如,startTime 可能是上午 9 点,endTime 可能是晚上 9 点。最好的存储方法是什么?这就是我现在正在做的事情:

timings: {
    startTime: {
      type: String,
      required: [true, "....."]
    },
    endTime: {
      type: String,
      required: [true, "....."]
    }
  }

这个想法是将值存储为字符串(“9AM”、“9PM”),并在每次查询数据库时进行某种时间解析。但我想知道是否有更好的方法来解决这个问题?我的另一个想法是将其存储为DateTime 并忽略日期部分。我还可以做些什么?我想尽可能避免在应用程序级别进行解析/处理,并利用 mongodb 的强大功能。

我正在使用猫鼬和 nodeJS。

【问题讨论】:

  • 你想只存储时间还是日期?
  • 只是时代。我希望能够存储商店的营业时间和关闭时间,例如 openingTime: 9AM, closingTime: 9PM

标签: node.js mongodb mongoose


【解决方案1】:

我同意 Date 类型不相关(它与时区有关,您可能不想到达那里......)

我会将其存储为数字,而不是字符串。为什么 ?因为您可能想查询它(就像所有“给我晚上 8 点后开门的所有商店”一样),并且使用字符串进行查询会很烦人......

我会同意的:

{
    startTime: {
        value: number;
        amOrPm: string; //(if you don't want to use a 24 hours base)
    },
    endTime: {
        value: number;
        amOrPm: string; //(if you don't want to use a 24 hours base)
    },

    timeOffset: number // So you keep track on the offset with the base timezone 
}

您还可以存储分钟,甚至只将时间存储在“自午夜以来经过的分钟数”中,并在每次访问时转换它。

以这种方式使用偏移量不会让您轻松查询跨不同时区的特定时刻,但我想在您的情况下它完全没用。

您也可以将天数存储为数字(“官方”星期天是 0,然后星期一是 1),但现在存储名称也很容易......

编辑:对于这些日子来说,使用数组可能会更好:

{
    daysOppenned: [0, 1, 4]
}

最后,如果每天都有不同的开放时间呢?也许你必须考虑有一个天数组,每个天都包含开始时间和结束时间,就像上面一样。

如果您想了解更多细节,有些商店在中午关门,而有些商店(如餐馆)每天只营业两次,然后您可以让他们按时间表打勾并将其存储在数组中.

如果您需要构建类似的东西,请告诉我们!

【讨论】:

  • 如何将其转换回 AM/PM 格式?我使用 24 小时格式来存储时间(540 = 9AM,1260 = 9PM)。
  • 您想用现有条目将数据库更新为 am/pm 格式?
  • 不,我正在尝试为前端服务。前端希望我以 AM/PM 格式发送时间
猜你喜欢
  • 1970-01-01
  • 2016-12-13
  • 2014-09-03
  • 2015-05-11
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 2012-07-15
  • 2020-07-09
相关资源
最近更新 更多