Как правильно выполнить запрос поиска со сравнением по длинному полю в MongoDB ??Код ошибки 2 - PullRequest
0 голосов
/ 19 декабря 2018

В моем документе есть поле long:

{
    "_id" : BinData(3,"qUlr7T//axtyJisrSnDRkw=="),
    ...
    "next-run-date" : "2018-12-23T17:22:59.026Z",
    "next-run-millis" : NumberLong("1540833792947"),
    ...
    "_class" : "...domain.scheduling.ScheduleReportConfiguration"
}

Я использую Spring Data MongoDB (v2.0.5) и имею репозиторий:

interface ScheduleReportConfigurationRepository extends MongoRepository<ScheduleReportConfiguration, UUID> {

List<ScheduleReportConfiguration> findByNextRunMillisLessThan( long milliseconds )
}

Когда я пытаюсь выполнить его, произведенный запрос:

{ "next-run-millis" : { "$lt" : { "$numberLong" : "1544809451462" } } }

Вопрос 1: Почему это выглядит так ??Когда я пытаюсь выполнить его в БД, это не имеет смысла.Почему Spring не создает такой запрос, как: { "next-run-millis" : { "$lt" : NumberLong(1544809451462) } } ??

В любом случае оба эти запроса не работают.Под первым запросом я имею в виду выполнение метода репозитория в моем тесте интеграции приложения, под вторым - выполнение запроса в оболочке mongo.Ошибка:

org.springframework.data.mongodb.UncategorizedMongoDbException:
Query failed with error code 2 and error message 'error processing query:
ns=test.scheduleReportConfigurationTree: next-run-millis $lt 1544809451462

No query solutions' on server mongo:27017; nested exception is
com.mongodb.MongoQueryException: Query failed with error code 2 and error message
'error processing query: ns=test.scheduleReportConfigurationTree: next-run-millis $lt 1544809451462

Вопрос 2: Что я не так ??Как мне сделать мой запрос сработал ??Согласно документам, операторы сравнения должны хорошо работать с long.

Спасибо за ваши ответы и помощь.

1 Ответ

0 голосов
/ 19 декабря 2018

Мне просто нужно было индексировать поле.

...