在MongoDB中更改日期存储格式

在MongoDB中更改日期存储格式,mongodb,Mongodb,在输入json文件中,我接收以下格式的日期: { "dt_received" : "2016-01-22T12:35:52.123+05" } 加载到MongoDB时,这些日期的存储方式如下: dt_received: "2016-01-22T07:35:52.123Z" 问题是我需要时区来计算我的指标。 在约束条件下,我无法创建新列,例如“dt_received_timezone”。 因此,我希望将日期存储格式更改为MongoDB,以使时区显示(或至少不显示) 这是实现这一目标的途径吗?或

在输入json文件中,我接收以下格式的日期:

{ "dt_received" : "2016-01-22T12:35:52.123+05" }
加载到MongoDB时,这些日期的存储方式如下:

dt_received: "2016-01-22T07:35:52.123Z"
问题是我需要时区来计算我的指标。 在约束条件下,我无法创建新列,例如“dt_received_timezone”。 因此,我希望将日期存储格式更改为MongoDB,以使时区显示(或至少不显示)
这是实现这一目标的途径吗?或任何解决方案?

如果您收到来自不同时区的数据并希望保留时区偏移,则必须将其保存到数据库中,如下所示:

var now = new Date();
db.data.save( { date: now, offset: now.getTimezoneOffset() } );
然后可以像这样重建原始时间

var record = db.data.findOne();
var localNow = new Date( record.date.getTime() -  ( record.offset * 60000 ) );

有关更多详细信息,请参见

如果您将收到的
dtu
存储为真实的
日期
,您将免费获得所有这些信息。例如,输入
new ISODate('2016-01-22T07:35:52.123Z')。getTimezoneOffset()
在mongo shell中,您将获得
-60
。这就是你需要的吗?这可能会有帮助。这不是我想要的。我想检索+05信息,以便获得我原来的日期/小时12:35:52。有什么原因吗?如果浏览器的时区为+5,则在Javascript中将数据呈现为新日期('2016-01-22T07:35:52.123Z')时,它将显示
2016-01-22T12:35:52.123+05
。假设应用服务器(mongo客户端)的时区为+5,情况可能并非如此。原始时区不会保留在任何地方,除非显式保存到文档的单独属性,否则将丢失。是的,您是正确的@AlexBlex。我已经更新了我的答案。当然,推荐的方法是将时间偏移量存储在字段中,但是,Rouse似乎不允许这样做。@Jaco:此操作返回-1,该偏移量是我的mongo服务器的偏移量。我可以接收来自不同时区的数据,我需要保留这些信息。如果您确实需要保留时区信息(而不是所有的UTC日期),则必须保存它。我已经更新了我的答案