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

Spring Boot中MongoDB Template添加第二个$or查询报错如何解决?

错误原因
  • MongoDB的BSON结构不允许同一层级出现重复的$or字段,你之前写的Shell查询看起来运行正常,实际是后定义的$or覆盖了前一个,并没有实现你预期的两个$or条件同时生效的逻辑。
  • Spring Data MongoDB做了前置校验,当你两次调用query.addCriteria()添加$or条件时,就会触发重复字段的异常。
解决方法

你实际要实现的逻辑是State!="Created" 且 第一个$or条件成立 且 第二个$or条件成立,所以需要把两个$or作为独立条件用andOperator拼接后再加入查询,正确代码如下:

// 1. 定义第一个$or条件组
Criteria or1 = new Criteria().orOperator(
        Criteria.where("Type").is("36").and("SubType").is("01"),
        // 原逻辑里两个and条件完全重复,实际业务可按需删减
        Criteria.where("Type").is("36").and("SubType").is("01")
);

// 2. 定义第二个$or条件组
Criteria or2 = new Criteria().orOperator(
        Criteria.where("name").is("Peter").and("type").is("UW"),
        // 原逻辑里两个and条件完全重复,实际业务可按需删减
        Criteria.where("name").is("Peter").and("type").is("UW")
);

// 3. 把所有条件用and拼接后加入查询
Criteria allCriteria = Criteria.where("State").ne("Created")
        .andOperator(or1, or2);
Query query = new Query(allCriteria);

以上代码生成的Mongo查询结构完全符合业务预期,不会再出现重复$or的报错。

内容的提问来源于stack exchange,提问作者Srikanth Janapati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:30:01