Как использовать один и тот же параметр для нескольких условий - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь сравнить значение с несколькими полями с помощью Spring-Data-MongoDB 1.10.0, я использую @Query, потому что вложенный документ - это объект с динамическими полями.

Но если яиспользовать тот же идентификатор, что и? 5, во всех условиях, я получил ошибку:

exception="com.mongodb.util.JSONParseException: 
{ companyType: "SPONSOR", companyId: 6710890, delivered: false, createdAt: { $gt: { "$date" : "2019-09-01T03:00:00.000Z"}, $lt: { "$date" : "2019-09-26T02:59:59.999Z"} }, $or:[ {requestPayload.sponsorGovernmentId: "73068519000185"}, {requestPayload.buyerGovernmentId: "73068519000185"5} ] }

Я пытаюсь так:

@Query(value = "{ companyType: ?0, companyId: ?1, delivered: ?2, " +
            "createdAt: { $gt: ?3, $lt: ?4 }, $or:[ {requestPayload.sponsorGovernmentId: ?5}, {requestPayload.buyerGovernmentId: ?5} ] }")
    Page<WebHookDelivery> findByCompanyTypeAndCompanyIdAndDeliveredAndCreatedAtIsBetweenAndAnyKey(String companyType,
                                                                                                  Integer companyId,
                                                                                                  Boolean delivered,
                                                                                                  Date createdAtStart,
                                                                                                  Date createdAtEnd,
                                                                                                  String governmentId,                  
                                                                                                  Pageable pageable);

Я пробовал только с? и [5].

Возможно ли и кто-нибудь объяснить, как это сделать?

1 Ответ

0 голосов
/ 01 октября 2019

Я нашел решение после отладки процесса привязки.

Мне просто нужно добавить одинарные кавычки в параметр, который мне нужно повторить, например:

"$or: [{ $or: [{ $or: [{ $or: [{ requestPayload.sponsorGovernmentId: ?5 }, " +
            "{requestPayload.buyerGovernmentId: '?5'}] }, {requestPayload.supplierGovernmentId: '?5'}] }, " +
            "{requestPayload.invoiceNumber: ?6}]}, {requestPayload.externalId: ?7}]

Итак, параметрномер пять можно использовать более одного раза.

...