Spring Data Mongodb JSON Query - org.bson.json.JsonParseException: Неверный ввод JSON. Позиция: X. Символ: '?' - PullRequest
0 голосов
/ 03 апреля 2019

Я использую данные Spring mongodb, и для своего запроса я специально использую запрос типа json.

В моем дао-интерфейсе я хочу получить список просроченных учетных записей сегодня. Это работает нормально.

Но существует новое требование проверять также те учетные записи, срок действия которых истекает через неделю (7 дней).

Работает, но сравнение основано на текущей дате:

@Query(value="{ 'accountDetails': {$eq:null}, $or: [ { 'accountDetails.expireDate': { $lt: 'new Date()' }, 'accountDetails.expireDate': {$eq:null} } ] }")
Collection<Accounts> getExpiredAccounts();

ОШИБКА: получает учетные записи, срок действия которых истекает через неделю:

@Query(value="{ 'accountDetails': {'$eq':null}, '$or': [ { 'accountDetails.expireDate': { '$lt': ?0 }, 'accountDetails.expireDate': {'$eq':null} } ] }")
Collection<Accounts> getExpiredAccounts(LocalDate expireDate);

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

Ошибка указывает на какой символ / причину .. и, похоже, указывает на ?0. Я думаю, что есть проблема с группировкой по одинарным кавычкам и т. Д., Но я не могу точно определить, где.

Я хочу добавить параметр expireDate и использовать его в запросе ... вот почему есть ?0, но он не работает, и я получаю ошибку.

Спасибо!

Обновление:

Решил, обернув ?0 одинарной кавычкой.

Правильный код:

@Query(value="{ 'accountDetails': {'$eq':null}, '$or': [ { 'accountDetails.expireDate': { '$lt': '?0' }, 'accountDetails.expireDate': {'$eq':null} } ] }")
Collection<Accounts> getExpiredAccounts(LocalDate expireDate);

Таким образом, проблема, кажется, заключается в выражении, и сообщение об ошибке дает мне представление о том, где может быть проблема. Я думаю, что это довольно распространенная ошибка, и быстрое решение состоит в том, чтобы правильно / правильно использовать одинарные кавычки ' в выражении.

...