如何使用Spring Data MongoDB Criteria实现多条件组合查询
问题解答
完全可以通过spring-data-mongodb提供的Query和Criteria类实现该组合条件查询,通过Criteria提供的逻辑操作符嵌套即可准确匹配你需要的条件优先级。
条件逻辑拆解
你的查询规则可以拆分为三层逻辑:
- 基础过滤条件:
birthYear字段值等于1990 - 两组姓名匹配规则为「或」关系,满足任意一组即可:
- 规则1:
firstName等于John 且lastName等于Smith - 规则2:
firstName等于Jane 且lastName等于Doe
- 规则1:
- 最终整体匹配逻辑:满足基础过滤条件,同时满足两组姓名规则中的任意一组
代码实现
你可以参考如下Java代码实现查询,核心是单独封装每个AND逻辑的条件组,再传入orOperator做或逻辑组合,避免条件优先级错乱:
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import java.util.List; // 假设对应集合的实体类为Person,注入MongoTemplate实例后调用即可 public List<Person> getTargetRecords(MongoTemplate mongoTemplate) { // 构建第一组姓名匹配条件 Criteria nameMatchGroup1 = Criteria.where("firstName").is("John") .and("lastName").is("Smith"); // 构建第二组姓名匹配条件 Criteria nameMatchGroup2 = Criteria.where("firstName").is("Jane") .and("lastName").is("Doe"); // 组装最终查询条件 Criteria finalCondition = Criteria.where("birthYear").is(1990) .orOperator(nameMatchGroup1, nameMatchGroup2); Query query = new Query(finalCondition); return mongoTemplate.find(query, Person.class); }
生成的原生查询验证
上述代码最终生成的MongoDB原生查询语句如下,和你需要的查询逻辑完全一致:
{ "birthYear": 1990, "$or": [ { "firstName": "John", "lastName": "Smith" }, { "firstName": "Jane", "lastName": "Doe" } ] }
执行该查询后返回的结果和你给出的期望结果完全匹配。
内容的提问来源于stack exchange,提问作者epng
相关产品推荐
相关产品推荐

