Spring Data MongoDB - Criteria API OrOperator 无法正常工作

Posted

技术标签:

【中文标题】Spring Data MongoDB - Criteria API OrOperator 无法正常工作【英文标题】:Spring Data MongoDB - Criteria API OrOperator is not working properly 【发布时间】:2013-03-29 18:31:40 【问题描述】:

我正面临 Spring Data MongoDB Criteria API orOperator 问题。

不规则动词的查询结果如下:(终端输出)

> db.verb.find('v2':'wrote');
 "_id" : ObjectId("5161a8adba8c6390849da453"), "v1" : "write", "v2" : "wrote", "v3" : "written" 

我使用Spring Data MongoDB Criteria API通过v1v2值查询动词:

Criteria criteriaV1 = Criteria.where("v1").is(verb);
Criteria criteriaV2 = Criteria.where("v2").is(verb);
Query query = new Query(criteriaV1.orOperator(criteriaV2));
List<Verb> verbList = mongoTemplate.find(query, Verb.class)

但不幸的是verbList 没有任何项目。

【问题讨论】:

【参考方案1】:

我们需要用 OR 条件明确指定一个新条件 - 试试下面的例子

Criteria criteria = Criteria.where("field1").is(val1).
                .andOperator(new Criteria().orOperator(Criteria.where("field2").is(filterVal),
                        Criteria.where("field3").is(filterVal)));

【讨论】:

【参考方案2】:

据我所知,为了使用 orOperator 你应该这样做:

Query query = new Query(new Criteria().orOperator(criteriaV1,criteriaV2));

【讨论】:

感谢您的帮助;在我检查应用程序日志后,我看到第一个参数被用作 AND 标准。因此,解决方案是使用您编写的 Criteria 的新实例或添加始终为真的条件。 如何使用多个 orOperator 来搜索多个条件? 算子方法可以接受任意数量的参数

以上是关于Spring Data MongoDB - Criteria API OrOperator 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Spring -Data MongoDB问题与作为接口的字段

用Spring data查询mongodb的问题,求解答

使用Spring访问Mongodb的方法大全——Spring Data MongoDB

如何在 spring-boot 中禁用 spring-data-mongodb 自动配置

将 Spring 安全 ACL 与 spring-data-mongodb 一起使用

spring data mongodb Query 及分页