Монго метод 'find' не работает для DateTime.MinValue

Я записываю некоторые поля даты как метаданные в GridFS, используя драйвер C# Mongo 2.2.3.3. Угловой корпус DateTime.MinValue, Это представляется в виде Date(-62135596800000), который представляет количество миллисекунд с 1 января 1970 года ( mongo doc), которое будет new DateTime(1970,1,1).AddMilliseconds(-62135596800000) в синтаксисе C#. Пока все хорошо.

При запросе различных значений даты db.fs.files.distinct("metadata.lastWriteTimeUtc")Я получаю значение выше и ряд ISODate в ISODate("yyyy-MM-ddTHH:mm:ss.fffZ")формат. Однако при попытке запросить угловой случай...

Проверка на равенство (нет ниже) не работает:

db.fs.files.find({"metadata.lastWriteTimeUtc": Date(-62135596800000)})
db.fs.files.find({"metadata.lastWriteTimeUtc": Date("0001-01-01T00:00:00")  })
db.fs.files.find({"metadata.lastWriteTimeUtc": Date("0001-01-01T00:00:00")  })
db.fs.files.find({"metadata.lastWriteTimeUtc": ISODate("0001-01-01T00:00:00.000Z")  })
db.fs.files.find({"metadata.lastWriteTimeUtc": ISODate("0001-01-01T00:00:00Z")  })
db.fs.files.find({"metadata.lastWriteTimeUtc": ISODate("0001-01-01")  })

Сравнение с другим значением не работает с конструктором даты

db.fs.files.find({"metadata.lastWriteTimeUtc": {$lt: Date(0)}  })

все же это делает с ISODate один

db.fs.files.find({"metadata.lastWriteTimeUtc": {$lt: ISODate("1970-01-01T00:00:00.000Z")}  })

Подход сравнения - это обходной путь, и мне это не нравится. Кто-нибудь знает, почему distinct метод находит DateTime.MinValue а также find не?

1 ответ

Решение

Вам нужно добавить new

db.fs.files.find({"metadata.lastWriteTimeUtc": new Date(-62135596800000)})
db.fs.files.find({"metadata.lastWriteTimeUtc": new Date(0)})
db.fs.files.find({"metadata.lastWriteTimeUtc": new Date("0001-01-01T00:00:00")  })
Другие вопросы по тегам