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

