MongoDB:我应该使用字符串而不是日期吗?

时间:2015-04-10 15:24:05

标签: json angularjs mongodb

在我使用带有JSON的angular,node和mongodb的web项目中,JSON序列化程序本身不支持date。这个问题有一个解决方法,如here所示。但是,我想知道将日期作为日期对象而不是MongoDB中的字符串保存的好处是什么?我对这个项目并不是那么远,所以我没有看到差异。

2 个答案:

答案 0 :(得分:7)

通过将日期保存为日期而不是字符串,您可能会错过一些非常有用的功能:

  1. MongoDB可以使用$gt$lt查询日期范围。
  2. 在3.0版中,聚合框架得到many useful aggregation operators for date handling。这些都不能用于字符串,很少有字符串操作符可以替代它们。
  3. MongoDB日期在UNIX纪元内部处理,因此从不同的时区或夏令时中保存时间戳等令人讨厌的细节不是问题。
  4. BSON日期只有8个字节。最小形式YYYYMMDD的日期是12字节(BSON中的字符串以长度为4字节的整数作为前缀)。当您将其存储为使用ISO 8601标准必须提供的所有ISODate字符串(日期,时间精确到毫秒和时区)时,您有32字节 - 存储空间的四倍。
  5. 您需要知道这对您的项目是否有任何影响。

    当你真的想避免使用BSON日期类型时,你应该考虑将日期存储为一个数字,表示经过的毫秒/秒/小时/天(适用于你的用例),因为一个固定的时间点而不是一个字符串。这样你就可以保留除了第2点之外的所有优点。

答案 1 :(得分:2)

如果采用这种方法,至少应该使用ISO日期。但我认为将日期值存储为日期对象有好处。将日期存储为日期对象将允许您添加索引,还应该有助于日期范围查询。说这么多开发人员似乎很乐意将日期存储为字符串,请参阅What is the best way to store dates in MongoDB?

相关问题