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

如何在Java中使用MongoOperations编写多条件查询Criteria

MongoDB Criteria 查询逻辑修正

问题背景

集合中的示例文档:

{"document" : "001", "requestType" : "A", "valid" : "true"},
{"document" : "002", "requestType" : "A", "valid" : "false"},
{"document" : "003", "requestType" : "B"}

文档规则:requestType和document为必填字段,valid为可选字段。

查询需求:

  • 当requestType为"A"时,必须满足valid属性为true
  • 其他requestType的文档全部返回

预期查询结果:

{"document" : "001", "requestType" : "A", "valid" : "true"},
{"document" : "003", "requestType" : "B"}

错误的尝试代码

Criteria criteria = new Criteria();
//others criteria are there as well thats why used orOperator
criteria.orOperator(
                    Criteria.where("requestType").is("A"),
                    Criteria.where("valid").is(true)
            );
final Query query = new Query();
query.addCriteria(criteria);

当前仅返回document:001,无法获取document:003。

正确解决方案

原代码的逻辑错误在于orOperator的条件组合,它实现的是"requestType为A 或者 valid为true",但我们需要的是**(requestType为A 且 valid为true) 或者 requestType不为A**。

正确的Criteria构建代码:

Criteria criteria = new Criteria();
criteria.orOperator(
    // 分支1:匹配requestType=A且valid=true的文档
    Criteria.where("requestType").is("A").and("valid").is(true),
    // 分支2:匹配所有requestType不等于A的文档
    Criteria.where("requestType").ne("A")
);
final Query query = new Query();
query.addCriteria(criteria);

逻辑说明

  • 第一个分支精准筛选requestType="A"且valid=true的文档,排除requestType="A"但valid=false的无效数据
  • 第二个分支匹配所有requestType不是"A"的文档,不管该文档是否包含valid字段,完全符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:05:21