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

如何在Spring MongoDB中实现多$or条件的查询?

解决Spring MongoDB多OR条件组合查询的报错问题

你遇到的报错是因为MongoDB的BasicDocument不允许同一层级出现多个$or操作符,而你的两种写法都触发了这个限制。正确的实现需要和你原始的MongoDB查询结构保持一致:将两个独立的OR条件组用andOperator封装到同一个顶级Criteria中。

正确代码实现

// 构建第一个OR条件组:field1=value1 或 field2=value2
Criteria orGroup1 = new Criteria().orOperator(
    Criteria.where("field1").is("value1"),
    Criteria.where("field2").is("value2")
);

// 构建第二个OR条件组:field3=value3 或 field3=null 或 field3存在
// 注意:你原始MongoDB查询里是$exists:true,之前代码里写的exists(false)是错误的,这里修正
Criteria orGroup2 = new Criteria().orOperator(
    Criteria.where("field3").is("value3"),
    Criteria.where("field3").is(null),
    Criteria.where("field3").exists(true)
);

// 用AND连接两个OR条件组
Query query = new Query(new Criteria().andOperator(orGroup1, orGroup2));

错误原因说明

  • 第一种写法:两次调用query.addCriteria()会把两个$or直接放在查询的顶级文档中,而MongoDB的BasicDocument不允许同一层级存在重复的$or键。
  • 第二种写法:链式调用orOperator和andOperator的逻辑错误,导致生成的查询结构混乱,同样触发了同一层级多$or的限制。

内容的提问来源于stack exchange,提问作者Olivier Tonglet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:00:56