Как объединить предложения AND и OR, используя @Query в Spring-Data-MongoDB? - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь создать запрос, подобный этому:

SELECT * FROM webHookDelivery 
        WHERE companyType = 'SPONSOR'
        AND companyId = 6710890
        AND eventType = 'CustodyResponseItemEvent'
        AND delivered = false
        AND (requestPayload.sponsorGovernmentId = '1234' OR requestPayload.invoiceNumber = '82899') 
        ORDER BY createdAt DESC

С аннотацией Spring-Data-MongoDB @Query, но не работает, а также параметры являются необязательными.

Я пробовал много разных запросов, последний из них:

@Query(value = "{ 'companyType': ?0, 'companyId': ?1, 'eventType': ?2, 'delivered': ?3, '$or':[ {'requestPayload.sponsorGovernmentId': ?4}, {'requestPayload.invoiceNumber': ?5} ]}")

Если я передам неверный идентификатор спонсора и правильный номер счета-фактуры, запрос должен дать мне результаты.

Может кто-нибудь объяснить, что я делаю не так?

1 Ответ

1 голос
/ 30 сентября 2019

Предполагается, что вы используете Java и SpringBoot. Нет необходимости использовать одинарные кавычки "'" вокруг переменных в запросе, если вы добавите их, это приведет к ошибке при выполнении запроса. Это должно быть просто ->

@Query(value = "{ companyType: ?0, companyId: ?1, eventType: ?2, delivered: ?3, $or:[ {requestPayload.sponsorGovernmentId: ?4}, {requestPayload.invoiceNumber: ?5} ]}")
...