Изо всех сил пытаюсь преобразовать строку zonedatetime в дату с помощью оболочки mongodb

#mongodb #zoneddatetime #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: Конечные данные» «»

Ответ №1:

Операторы даты не будут понимать пользовательский формат, а также не будут понимать смещение часового пояса

  • $substr чтобы выбрать только дату от 0 до 23 символов
  • установите часовой пояс на «GMT».
 db.test.aggregate([
  {
    $project: {
      date: {
        "$dateFromString": {
          "dateString": {
            "$substr": [ "$dateString", 0, 23 ]
          },
          "timezone": "GMT"
        }
      }
    }
  }
])
 

Игровая площадка