Проблемы с фильтрацией mongodb по диапазону запросов - PullRequest
0 голосов
/ 13 марта 2019

У меня проблема с mongodb.Может ли кто-нибудь объяснить мне, почему это работает (возвращает некоторые результаты):

db.getCollection('test').find({"reportedOn" : { "$gte" :    ISODate("2019-03-01T01:20:00"), "$lt" : ISODate("2019-04-01T02:00:00") } });

И это не работает (возвращает ноль):

db.getCollection('test').find({"reportedOn" : { "$gte" : { "$date" : 1551398400000 }, "$lt" : { "$date" : 1554073200000 } } });

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 13 марта 2019

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

Вот интересная часть запроса оДата:

В соответствии с Типы данных в оболочке mongo оба должны быть эквивалентны:

База данных mongo предоставляет различные методы для возврата даты, либо в видестрока или как объект Date:

  • Метод Date (), который возвращает текущую дату в виде строки.
  • Конструктор new Date (), который возвращает объект Date с использованием ISODate ()wrapper.
  • Конструктор ISODate (), который возвращает объект Date с помощью оболочки ISODate ().

и с использованием ISODate должен по-прежнему возвращать объект Date.

{"$date": "ISO-8601 string"} может использоваться, когда требуется строгое представление JSON.

Поэтому вы можете проверить все доступные форматы ISO-8601 и обновить свойкод в соответствии с ожидаемым форматом, чтобы получитьработает как положено.

0 голосов
/ 13 марта 2019

Попробуйте выполнить следующий запрос

{ "$date" : { "$numberLong" : "<dateAsMilliseconds>" } }

, как указано в документации MongoDB, вместо сравнения только с $ date. Ссылка

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