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

如何使用MongoDB Java驱动组合多查询或按不同字段查询?

MongoDB Java驱动:组合查询与多条件查询解决方案

嘿,我来帮你搞定这两个MongoDB Java驱动的查询问题!下面分情况给你详细说明,附代码示例:

一、组合两个查询条件(AND/OR 逻辑)

如果你需要把query1和query2组合起来查询,MongoDB Java驱动提供了Filters工具类来实现逻辑组合,常用的是AND和OR两种逻辑:

1. AND逻辑(同时满足两个条件)

如果需要文档同时匹配query1和query2,用Filters.and()方法把两个查询条件合并:

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import com.mongodb.client.FindIterable;

// 假设你已经获取了MongoCollection<Document> col
Document query1 = Filters.eq("status", "active");
Document query2 = Filters.gt("age", 30);

// 组合两个查询条件(AND关系)
Document combinedQuery = Filters.and(query1, query2);

// 执行查询
FindIterable<Document> docs = col.find(combinedQuery);

2. OR逻辑(满足任意一个条件)

如果文档匹配query1或者query2即可,用Filters.or()方法:

Document query1 = Filters.eq("category", "electronics");
Document query2 = Filters.lt("price", 100);

// 组合两个查询条件(OR关系)
Document combinedQuery = Filters.or(query1, query2);

FindIterable<Document> docs = col.find(combinedQuery);

小贴士:Filters.and()和Filters.or()都支持传入多个条件,不止两个哦,比如Filters.and(query1, query2, query3)就能同时满足三个条件。

二、查询满足不同条件的文档

这里的“不同条件”其实就是灵活组合多字段、多逻辑的查询,除了上面的AND/OR,还可以针对不同字段设置不同条件,或者嵌套逻辑。举几个常见场景:

1. 多字段不同条件的AND查询

比如查询“状态为active,年龄大于30,且城市是New York”的文档:

Document query = Filters.and(
    Filters.eq("status", "active"),
    Filters.gt("age", 30),
    Filters.eq("city", "New York")
);

FindIterable<Document> docs = col.find(query);

2. 混合逻辑查询(AND+OR)

比如查询“年龄大于30,且(状态为active或者等级为VIP)”的文档:

Document query = Filters.and(
    Filters.gt("age", 30),
    Filters.or(
        Filters.eq("status", "active"),
        Filters.eq("level", "VIP")
    )
);

FindIterable<Document> docs = col.find(query);

3. 针对数组/嵌套文档的条件查询

如果你的文档有数组或嵌套结构,也可以用Filters工具类生成对应条件,比如查询tags数组包含"java"的文档:

Document query = Filters.in("tags", "java");
FindIterable<Document> docs = col.find(query);

或者查询嵌套文档address.city等于"London"的文档:

Document query = Filters.eq("address.city", "London");
FindIterable<Document> docs = col.find(query);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:25:45