MongoDb поиск по полю даты - PullRequest
       7

MongoDb поиск по полю даты

0 голосов
/ 31 августа 2018

У меня есть коллекция Mongo с DateAdded в формате ISODate

{
"_id" : 4098199,
"DateAdded" : ISODate("2018-08-31T05:06:13.150Z")
}

так что это 1 час, затем местное время и дата

LocalDatetime is 2018-08-31 06:06:13 +01:00
UTC is 2018-08-31T05:06:13.150Z

Использование следующего запроса, когда я пытаюсь добавить записи после 2018-08-31 06:00:00 Я не получаю эти записи, как в UTC

 db.getCollection('User').find({"DateAdded":{$gte: new ISODate('2018-08-31T6:00:00Z')}})

Как преобразовать дату UTC при поиске по полю даты в MongoDB?

1 Ответ

0 голосов
/ 31 августа 2018

Прежде всего ISODate('2018-08-31T6:00:00Z') имеет опечатку - она ​​должна быть 06:00:00Z. Без начального значения 0 ISODate helper возвращает '2018-08-31T00:00:00Z' 0am UTC и запрос фактически возвращает документ.

Во-вторых, по местному времени ничего нет. ISODate находится в UTC, поэтому ISODate("2018-08-31T05:06:13.150Z") - это 5:00 UTC, а ISODate("2018-08-31T06:06:13.150Z") - 6:00 UTC. 5 < 6, поэтому условие $gte не выполняется и документ не возвращается.

Наконец, если вы хотите использовать местное время - используйте Date вместо:

db.getCollection('User').find({"DateAdded":{$gte: new Date('2018-08-31T6:00:00')}})

Вернет все документы, созданные после 5:00 UTC, 6:00 по местному времени. Обратите внимание, что в конце нет Z, который указывает часовой пояс UTC.

В качестве рекомендации - не связывайтесь с местным временем. Преобразуйте его в UTC как можно скорее и всегда работайте с UTC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...