Yash
Yash

Reputation: 71

How to convert date stored as string/datetime(both) to only datetime in MongoDB?

I am working on a dataset where a field is stored as either string(%Y-%m-%d) or datetime(ISODate Format ex- 2020-05-16T00:00:00.000+00:00). While fetching the same on Python and using $gte/$lte the string type values are getting excluded from the match.

I have tried converting the field to datetime using $dateFromString but since there are values in datetime format, the following error is thrown: $dateFromString requires that 'dateString' be a string, found: date with value 2019-05-31T00:00:00.000Z

Similarly trying to use $dateToString also throws a similar error because of values stored as string in the same field: can't convert from BSON type string to Date.

Also using $toDate throws the following error, which I have no clue about: Error parsing date string 'Invalid date'; 0: passing a time zone identifier as part of the string is not allowed 'I'; 8: Double timezone specification 'd'; 6: Double timezone specification 'd'.

Can anyone suggest a solution as I can't seem to find anything to handle this particular issue?

Upvotes: 1

Views: 2202

Answers (1)

Joe
Joe

Reputation: 28336

$toDate is a convenience wrapper for $convert

You could get convert the strings to dates while leaving any values that don't convert properly, like

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

Upvotes: 2

Related Questions