在MongoDB中存储转换后的日期

时间:2018-10-16 14:27:55

标签: node.js mongodb mongoose timezone

我正在研究一个项目,因为这是第一个项目,所以我不知道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转换为本地时区的解决方案,但我想获得整个转换后的日期,而不仅仅是小时/天/月。

1 个答案:

答案 0 :(得分:0)

从mongo文档看来,您无法https://docs.mongodb.com/manual/tutorial/model-time-data/

他们建议您将其转换为应用程序端。

我认为您应该考虑如何使用日期以及如何为馆藏建立索引。

例如,如果您的目标是在用户的本地时区的一天中的特定时间向用户发送“生日快乐”通知,则您可能希望将该时区转换为您在Mongo中存储的时区。这样,您就可以在生日日期字段上建立索引,并通过查询db.users.find({ birthdate: )来获取需要通知的所有用户。显然,如果用户实际移动了时区,则可能会中断(如果他们移动了时区,则必须对其进行更新)。另外,您可以将他们的生日+当地时区存储在单独的字段中,但这会使查询变得更加复杂。