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

标签 json angularjs mongodb

在我使用带有 JSON 的 angular、node 和 mongodb 的 Web 项目中,JSON 序列化程序本身不支持日期。此问题有一个解决方法,如图所示 here .但是,我想知道在 MongoDB 中将日期保存为日期对象而不是字符串有什么好处?我对这个项目了解不多,所以我看不出有什么不同。

最佳答案

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

  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 字节 - 四倍的存储空间。

您需要知道这些对您的项目是否重要。

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

关于json - MongoDB:我应该使用字符串而不是日期吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29565156/

相关文章:

javascript - angular js 在 watch 语句中恢复范围属性的更改

javascript - 使用monk访问Mongodb时使用纯JS版本,加载c++ bson扩展失败

javascript - queryselector 必须是对象 mongodb

Mongodb 副本集状态显示 "RECOVERING"

Ruby解析JSON.load和YAML.load生成不同的 key 类型

python - 如何在Python中扩展环境变量同时转义特殊字符?

android - 使用电话设备时,我在 ionic3 中看不到 JSON 数据(来自外部 Url 的 JSON 数据)

angularjs - 如何在 rails slim 模板中添加 Angular 属性指令以输入?

javascript - Angular POST 到 API 不传递数据

java - com.networknt json-schema-validator 不检查 json 中的未知关键字