努力将 zoneddatetime 字符串转换为 mongodb shell 的日期

Struggling to convert zonedatetime string to date with mongodb shell


我有这些 mongo 文档,日期如下:这个日期是 java: ZonedDateTime.now(),但它作为字符串进入 mongo:
db.test.insert({"dateString" : "2020-07-24T11:06:53.975+02:00[GMT+02:00]"})

所以我想提取一份报告,但将其格式化为最新格式,这样我就可以在管道中做一些不同的事情:
尝试过:

db.test.aggregate([{$project: {date: {"$dateFromString": {"dateString": "$dateString", "format": "yyyy-MM-dd'T'HH:mm:ss", "timezone": "Etc/GMT+2"}}}}])

但我似乎无法正确设置格式:
“errmsg”:“解析日期字符串‘2020-07-24T11:06:53.975+02:00[GMT+02:00]’时出错;0:未找到格式文字‘2’;1:未找到格式文字’0 '; 2: 格式文字未找到 '2'; 3: 格式文字未找到 '0'; 5: 格式文字未找到 '0'; 6: 格式文字未找到 '7'; 8: 格式文字未找到 '2 '; 9: 未找到格式文字 '4'; 10: 未找到格式文字 'T'; 11: 未找到格式文字 '1'; 12: 未找到格式文字 '1'; 13: 未找到格式文字':'; 14: 未找到格式文字 '0'; 15: 未找到格式文字 '6'; 16: 未找到格式文字 ':'; 17: 未找到格式文字 '5'; 18: 未找到格式文字'3'; 19: 格式文字未找到 '.'; 20: 格式文字未找到 '9'; 21: 格式文字未找到 '7'; 22: 格式文字未找到 '5'; 23: 尾随数据 '+ '"

日期运算符不理解自定义格式,也不理解偏移时区

  • $substr 到 select 日期只能从 0 到 23 个字符
  • 将时区设置为“GMT”
db.test.aggregate([
  {
    $project: {
      date: {
        "$dateFromString": {
          "dateString": {
            "$substr": [ "$dateString", 0, 23 ]
          },
          "timezone": "GMT"
        }
      }
    }
  }
])

Playground