我在 mongodb 中以 UTC 时间格式插入了数据。我希望根据时区转换时间。在 mongo 查询中是否有可能这样做?

最佳答案

让我们考虑您的文档包含 ISODate 如下:

db.collection.insert({"date":new Date()})

以上查询以 date 格式插入 ISODate 现在您想将此 ISODate 转换为 give timeZone

假设您想将上述日期转换为 Eastern Daylight Saving Time ( EDT ) epoch time zone conertor 然后 offset 转换为 14400 * 1000 。首先将ISODate转换为timeStamp,然后再次使用substract EDT Offset in timeStamp and then convert timeStamp to ISODate`。

检查以下聚合查询:
db.collection.aggregate({
  "$project": {
    "timestamp": { //convert ISODate tom timestamp
      "$subtract": [{
        "$divide": [{
          "$subtract": ["$date", new Date("1970-01-01")]
        }, 1000]
      }, {
        "$mod": [{
          "$divide": [{
            "$subtract": ["$date", new Date("1970-01-01")]
          }, 1000]
        }, 1]
      }]
    }
  }
}, {
  "$project": {
    "timeZoneTimeStamp": {
      "$subtract": [{ //substract timestamp to given offset if offset will in postive then replace  subtract  to add
        "$multiply": ["$timestamp", 1000]
      }, 14400000]
    }
  }
}, {
  "$project": {
    "timeZoneTimeStamp": 1, //converted timeZoneTimeStamp if required
    "_id": 0,
    "newDate": { // newDate is converted timezone ISODate
      "$add": [new Date(0), "$timeZoneTimeStamp"]
    }
  }
})

注意 :
在上面从 ISODATEtimeStamp ref. here 的查询转换中

10-08 01:21