node.js - 在 MongoDB 中存储转换后的日期
问题描述
我正在做一个项目,因为它是第一个项目,所以我不知道 Mongo 将所有内容存储在 UTC 中,直到我注意到生日存储在第 X-1 天 23:00:00 而不是第 X 天 00:00正如它应该。我尝试在存储之前使用时刻并将日期转换为我的时区,但 Mongo 忽略了它。
const bdate = moment.tz(body.birthdate, "YYYY-MM-DD", "Europe/Lisbon").format();
在控制台上显示:
1998-10-20T00:00:00+01:00
在数据库中显示:"1998-10-19T23:00:00.000Z"
我该怎么做才能将数据存储在我的本地时区或强制 MongoDB 显示本地时区日期?
我已经看到使用 $project 转换为本地时区的解决方案,但我想获得整个转换后的日期,而不仅仅是小时/日/月。
解决方案
从 mongo docs 看来你不能https://docs.mongodb.com/manual/tutorial/model-time-data/
他们建议您将其转换为应用程序端。
我认为您应该考虑如何使用日期以及如何索引集合。
例如,如果您的目标是在用户当地时区的特定时间在他们生日时向用户发送“生日快乐”通知,您可能希望将该时区转换烘焙到您在 Mongo 中存储的内容中。这样您就可以在生日字段上建立索引,并通过查询来获取所有需要通知的用户db.users.find({ birthdate: )
。显然,如果用户实际移动了时区,这会中断(如果他们移动了,您必须更新它)。或者,您可以将他们的生日 + 本地时区存储为单独的字段,但这会使查询变得更加复杂。
推荐阅读
- java - Big-Theta:theta(n^3) 算法的混淆时间输出
- asp.net - 使用 Code First 在 asp.net 的网页中列出 IdentityRoles 时出现 NullReferenceException
- java - 没有getter setter方法的Java封装
- sonarqube - 用于获取关键安全漏洞的 SonarQube API
- laminas-api-tools - Apigility 1.5.1 生产模式下没有 RPC 服务路由
- git - git: tilda (~) 和 caret (^) 有什么区别
- amazon-web-services - Windows 2019 Datacenter 上的 AWS CLI 安装失败
- python-3.x - 如何重定向硬编码调用以打开自定义文件?
- powershell - 将 Get-ACL 结果合并为 1 个对象
- algorithm - Fischer 的互斥算法