当前位置: 首页 > 知识库问答 >
问题:

使用spring数据mongo标准将查询从JPQL移植到mongo

马高谊
2023-03-14

我已经将我的一些EntityJPA移植到文档,现在移植我的一些查询。这是JPA查询:

em.createQuery("select distinct c from CustomerImpl c left join fetch c.addresses ca where (:name is null or c.firstName LIKE :name or c.lastName LIKE :name) and (:ref is null or c.externalReference LIKE :ref) and (:city is null or ca.city LIKE :city) order by c.firstName").setParameter("name", name).setParameter("ref", customerRef).setParameter("city", city).getResultList();

以下是我的尝试:

    Criteria orNameCriteria = new Criteria().orOperator(Criteria.where("firstName").is(null), Criteria.where("firstName").is(name), Criteria.where("lastName").is(name));
    Criteria orCustomerRefCriteria = new Criteria().orOperator(Criteria.where("externalReference").is(null), Criteria.where("externalReference").regex(customerRef,"i"));
    Criteria orAddress = new Criteria().orOperator(Criteria.where("addresses.city").is(null), Criteria.where("addresses.city").regex(city, "i"));
    Query nameq = new Query(new Criteria().andOperator(orNameCriteria,orCustomerRefCriteria,orAddress));

此查询返回零大小的arraylist。然后,我将或更改为使用is子句,并确保变量中包含的数据作为后缀和前缀。那也不管用。

但是来自mongoVueRockMongo客户端的查询:

{ firstName: /SAM/}

返回数据。

问题1:如何使用spring数据mongo标准编写LIKE子句<问题2:这是在标准中使用or and子句的正确方法吗

感谢阅读

共有2个答案

常业
2023-03-14

因为我没有能力添加评论。。。

如果您在条件上进行静态导入,它将使where子句看起来更好。

条件或地址=新条件()。orOperator(其中(“地址.城市”)。为(null),其中(“addresses.city”)。regex(城市,“i”);

许焕
2023-03-14

Criteria.where("field"). regex(模式)应该工作

 类似资料:
  • 我有一个带有在线和离线日期的产品pojo 我使用以下查询来获取日期为空或日期为的所有产品。但是以下查询仅在时才返回我。 有线索吗?

  • 看看有没有人能帮上忙。 我想使用Spring数据mongodb的存储库,我想使用查询注释来过滤按值A=10或A=20查找的数据 很明显,“试着做一个AND,我需要一个OR。 有什么想法吗?

  • 我想在用户在UI中选择的MongoDB中的文档列表上运行批量删除操作,因此我需要动态构建一个如下所示的查询(or子句为所选的每个文档展开): 刚才我正在使用字符串串联来实现这一点。 是否可以使用Spring数据MongoDB标准生成器(org.springframework.Data.MongoDB.core.query.Criteria)构建此查询?

  • 我正在玩Spring数据Mongo查询,并想知道字段属性参数。以下是我从文档中获得的示例: 问题是:在{“firstname”:1,“lastname”:1}中,1的含义是什么?

  • 我想知道是否有可能通过spring jpa存储库执行jpql查询,并能够使用分页作为排序功能,就像使用示例和规范一样。我想做一些类似的事情: QueryByQuestpleExector接口,即声明: JpaSpecificationExector接口声明:

  • 问题内容: 我正在尝试将代码从使用Java 计时器移植到使用Scheduledexecutorservice 我有以下用例 我应该用ScheduledExecutorService替换A类和B类中的Timer实例,并使ATimerTask和BTimerTask类成为Runnable类,例如 这样对吗。 编辑:移植的主要动机之一是因为在TimerTask中引发的运行时异常会杀死一个线程,因此无法对其