我刚开始学习MongoDB并希望从MySQL慢慢迁移.
在MySQL中,有两种不同的数据类型 - DATE ('0000-00-00')和DATETIME ('0000-00-00 00:00:00').在我的MySQL中,我使用的是DATE类型,但我不确定如何将它们转移到MongoDB中.在MongoDB中,有一个Date可比较的对象DATETIME.看起来使用Date对象是最合适的,但这会浪费空间,因为没有使用小时,分钟,秒.另一方面,将日期存储为字符串似乎是错误的.
('0000-00-00')在MongoDB中存储日期是否有黄金标准?
Geo*_*oth 56
我实际上正在转换一个MongoDB数据库,其中日期存储为正确的Date()类型,而不是将它们存储为表单中的字符串 yyyy-mm-dd.为什么,考虑到其他所有的回答者都说这是一个可怕的想法?简单地说,由于无休止的痛苦,我一直在努力尝试使用JavaScript中的日期,这些日期没有(真正的)时区概念.我一直在MongoDB中存储UTC日期,即一个Date()对象,其中包含我想要的日期和设置为午夜UTC的时间,但它出乎意料地复杂且容易出错,以便将用户提交的日期正确转换为来自任何时区的日期恰好在.我一直在努力让我的JavaScript"无论本地时区到UTC"代码都能正常工作(是的,我知道Sugar.js和Moment.js)并且我已经决定使用简单的字符串了好的旧MySQL标准yyyy-mm-dd是要走的路,我将在客户端运行时根据需要解析为Date()对象.
顺便说一句,我也试图将这个MongoDB数据库与FileMaker数据库同步,该数据库也没有时区概念.对我而言,简单地不存储时间数据,特别是当它像UTC午夜一样毫无意义时,有助于确保较少错误的代码,即使我必须时不时地解析字符串日期.
Rem*_*iet 20
BSON(mongo本身使用的存储数据格式)具有专用日期类型UTC日期时间,它是64位(因此,8字节)有符号整数,表示自Unix时间纪元以来的毫秒数.您使用任何其他类型存储日期和时间戳的原因很少.
如果你迫切希望每个日期保存几个字节(再次,使用mongo的填充和最小块大小以及所有这些在极少数情况下都值得一试)你可以将日期存储为3字节二进制blob,方法是将其存储为YYYYMMDD格式的无符号整数,或2字节二进制blob,表示"X年1月1日以来的天数",其中X必须适当选择,因为它只支持跨越179年的日期范围.
编辑:正如下面的讨论所示,在极少数情况下,这只是一种可行的方法.基本上; 使用mongo的原生日期类型;)
| 归档时间: |
|
| 查看次数: |
31789 次 |
| 最近记录: |