Python 如何在MongoDB中将存储为字符串/日期时间(两者)的日期转换为仅日期时间?

Python 如何在MongoDB中将存储为字符串/日期时间(两者)的日期转换为仅日期时间?,python,mongodb,datetime,nosql,mongodb-compass,Python,Mongodb,Datetime,Nosql,Mongodb Compass,我正在处理一个数据集,其中字段存储为字符串(%Y-%m-%d)或日期时间(ISODate格式ex-2020-05-16T00:00:00.000+00:00)。在Python上获取相同的值并使用$gte/$lte时,字符串类型值将从匹配中排除 我已尝试使用$DATEFORMSTRING将字段转换为datetime,但由于存在datetime格式的值,因此引发以下错误: $dateFromString要求“dateString”是一个字符串,找到的日期值为2019-05-31T00:00:00.0

我正在处理一个数据集,其中字段存储为字符串(%Y-%m-%d)或日期时间(ISODate格式ex-2020-05-16T00:00:00.000+00:00)。在Python上获取相同的值并使用$gte/$lte时,字符串类型值将从匹配中排除

我已尝试使用$DATEFORMSTRING将字段转换为datetime,但由于存在datetime格式的值,因此引发以下错误: $dateFromString要求“dateString”是一个字符串,找到的日期值为2019-05-31T00:00:00.000Z

同样,尝试使用$dateToString也会引发类似的错误,因为值存储在同一字段中的字符串中: 无法将BSON类型字符串转换为日期

使用$toDate还会引发以下错误,对此我一无所知:解析日期字符串“无效日期”时出错;0:不允许将时区标识符作为字符串的一部分传递给'I';8:双时区规范“d”;6:双时区规范“d”


由于我似乎找不到任何方法来处理这个特殊问题,有人能提出解决方案吗?

$toDate
是一个方便的包装器

您可以将字符串转换为日期,同时保留任何无法正确转换的值,如

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

可以有条件地将日期字段值转换为一种类型,然后与输入日期进行比较。或者,根据字段类型进行有条件的比较,但是,转换输入日期值。