java - 如何在 Spring-Data-MongoDB 中使用 @Query 组合 AND 和 OR 子句?

标签 java spring spring-data-mongodb

我正在尝试创建这样的查询:

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} ]}")

如果我传递了不正确的sponsorGovernmentId和正确的invoiceNumber,查询应该给我结果。

有人可以解释一下我做错了什么吗?

最佳答案

假设您正在使用 Java 和 SpringBoot。 查询中的变量不需要使用“'”单引号,如果添加它们,则会在执行查询时出错。应该很简单 ->

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

关于java - 如何在 Spring-Data-MongoDB 中使用 @Query 组合 AND 和 OR 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58161048/

相关文章:

java - 在mapstruct映射器中实现自定义行为的问题

spring-data-mongodb - 执行多个 react 操作的正确方法

使用 FileWriter 进行 Java UTF-8 编码

java - 如何在 Selenium Grid 中以 50/50 并行方式执行测试

spring - 如何使用 Spring Boot 1.5.2 注入(inject) Jersey 端点接口(interface)的实现?

java - Tomcat 8 - 请求的资源不可用

java - 准备位图 byte[] 数据以传递给 jni

java - 如何在tomcat中按/manager/html/list下的名称显示servlet

java - 调用页面大小大于 36 的 Spring Data MongoDB 存储库方法时出现 StackOverflowError

java - spring data rest mongodb java.lang.IllegalArgumentException : PersistentEntity must not be null