如何在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
相关产品推荐
相关产品推荐

