我正在研究一个项目,因为这是第一个项目,所以我不知道Mongo将所有内容存储在UTC中,直到我注意到生日存储在X-1天23:00:00而不是X天应该是00:00。在存储日期之前,我曾尝试使用moment将日期转换为我的时区,但是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转换为本地时区的解决方案,但我想获得整个转换后的日期,而不仅仅是小时/天/月。
答案 0 :(得分:0)
从mongo文档看来,您无法https://docs.mongodb.com/manual/tutorial/model-time-data/
他们建议您将其转换为应用程序端。
我认为您应该考虑如何使用日期以及如何为馆藏建立索引。
例如,如果您的目标是在用户的本地时区的一天中的特定时间向用户发送“生日快乐”通知,则您可能希望将该时区转换为您在Mongo中存储的时区。这样,您就可以在生日日期字段上建立索引,并通过查询db.users.find({ birthdate: )
来获取需要通知的所有用户。显然,如果用户实际移动了时区,则可能会中断(如果他们移动了时区,则必须对其进行更新)。另外,您可以将他们的生日+当地时区存储在单独的字段中,但这会使查询变得更加复杂。