提问者:小点点

MongoDB:存储时间范围的最佳方法


我需要在文档中存储类似starttimeendtime的内容。 为了提供更多的上下文,这些将反映商店的开业和关门时间。 因此,例如,starttime可以是9am,endtime可以是9pm。 存储这个最好的方法是什么? 这就是我现在正在做的事情:

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

其思想是将值存储为字符串(“9am”,“9pm”),并在每次查询数据库时进行某种时间解析。 但我在想有没有更好的方法? 我的另一个想法是将其存储为datetime,忽略日期部分。 我还能做什么? 我希望尽可能避免在应用程序级别上进行解析/处理,并利用MongoDB的强大功能。

我用猫鼬和Nodejs。


共1个答案

匿名用户

我同意日期类型是不相关的(而且它与时区有关,您可能不想到达那里。。。)

我会将它存储为数字,而不是字符串。 为什么? 因为您可能想要查询它(就像所有“给我所有晚上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 
}

您也可以存储分钟,甚至只存储“minutes ellapsed sech midnight”中的时间,并在每次访问时进行转换。

这样的偏移量不能让您轻松地跨不同时区查询某个特定时刻,但我猜这在您的情况下是完全没用的。

你也可以把天存储成一个数字(‘正式’星期日是0,那么星期一是1),但是现在存储一个名字也很容易。

编辑:对于那些日子来说,也许用一个数组会更好:

{
    daysOppenned: [0, 1, 4]
}

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

如果你想了解更多细节,有些商店在中午关门,而有些商店(比如餐馆)一天只开两次,你可以让它们在日程表上打勾,并将其存储在数组中。

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