Как преобразовать дату, хранящуюся как строку / datetime (оба), только в datetime в MongoDB? - PullRequest
0 голосов
/ 14 июля 2020

Я работаю над набором данных, где поле хранится как строка (% Y-% m-% d ) или datetime (формат ISODate ex- 2020-05-16T00: 00: 00.000+ 00:00). При извлечении того же на Python и использовании $ gte / $ lte значения строкового типа исключаются из совпадения.

Я попытался преобразовать поле в datetime с помощью $ dateFromString, но поскольку в datetime есть значения формат, выдается следующая ошибка: $ dateFromString требует, чтобы 'dateString' была строкой, найдено: дата со значением 2019-05-31T00: 00: 00.000Z

Аналогично пытается использовать $ dateToString также вызывает аналогичную ошибку из-за значений, хранящихся в виде строки в том же поле: не может преобразовать из строки типа BSON в Date .

Также использование $ toDate вызывает следующую ошибку: о котором я понятия не имею: Ошибка синтаксического анализа строки даты 'Invalid date'; 0: передача идентификатора часового пояса как части строки недопустима 'I'; 8: Двойная спецификация часового пояса «d»; 6: Двойная спецификация часового пояса 'd' .

Может ли кто-нибудь предложить решение, поскольку я не могу найти ничего для решения этой конкретной проблемы?

1 Ответ

1 голос
/ 14 июля 2020

$toDate - это удобная оболочка для $ convert

Вы можете преобразовать строки в даты, оставив при этом любые значения, которые не конвертируются должным образом, например

{$convert: {
      input: "$fieldname",
      to: "date",
      onError: "$fieldname",
      onNull: "$fieldname"
}}
...