You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Spring Data MongoDB Criteria实现多条件组合查询

问题解答

完全可以通过spring-data-mongodb提供的Query和Criteria类实现该组合条件查询,通过Criteria提供的逻辑操作符嵌套即可准确匹配你需要的条件优先级。

条件逻辑拆解

你的查询规则可以拆分为三层逻辑:

  • 基础过滤条件:birthYear字段值等于1990
  • 两组姓名匹配规则为「或」关系,满足任意一组即可:
    • 规则1:firstName等于John 且 lastName等于Smith
    • 规则2:firstName等于Jane 且 lastName等于Doe
  • 最终整体匹配逻辑:满足基础过滤条件,同时满足两组姓名规则中的任意一组

代码实现

你可以参考如下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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:39:37