Mongodb时间序列数据和时区处理

时间:2016-08-06 14:27:33

标签: node.js mongodb time-series momentjs data-modeling

我正在使用node.js和mongodb创建一个应用程序,该应用程序在一天内按小时存储所有温度值。 温度值应根据传感器所在的时区显示在仪表板中。 我根据时间序列数据的建议创建了一个数据模型,但我不知道如何处理时区,因为mongodb以UTC格式存储日期,所以在我的数据模型中,对象“hours”每天每小时都有静态字段。 / p>

// Temperatures by hour in a day.
{
 dateStart: ISODate("2016-08-06T00:00:00.000Z"), // This is the start of the day
 timeZone: "Europe/Madrid", // We could store the time zone of the sensor.
 hours: {  // I'm not sure how to deal with these values. Should be UTC hours too?
  0: 20
  1: 21,
  2: 24,
  .
  .
  .
  23: 16
 }
}

问题是:我该如何处理时区?

在我当地时间开始一天(2016-08-06T00:00:00)将转换为UTC至2016-08-05T22:00:00.000 + 02:00。

第一种方法可能是:

  1. 传感器时区为'Europe / Madrid'(CEST,从UTC开始的02:00差异)
  2. 使用'Europe / Madrid时区获取一天的开始,将其转换为UTC并将其存储在数据库中。 Field startDate将为“2016-08-05T22:00:00.000Z”
  3. 为了存储25小时的温度一小时:获取当地时间('欧洲/马德里'),例如18小时,然后转换为UTC。结果是16h。所以小时16 = 25。
  4. 在这种情况下,我们在星期日有UTC时间,但小时的对象不是UTC。这是'欧洲/马德里,我对此决定不太相信。

    有关改进此设计的任何想法吗?

1 个答案:

答案 0 :(得分:0)

您的设计应该有效,但是您的示例应该是

{
   ...
   16: 25
   ...
}

小时是对dateStart的偏移方面。因此,在显示时,您应该将16个小时添加到开始日期,您可以在所需的时区中显示该日期。