Java MongoDB驱动中如何构造Name匹配ABC或DFG的正则查询?
在MongoDB Java驱动中构造多值LIKE(OR条件)的查询方法
嗨,很高兴能帮你解决这个MongoDB Java驱动的查询问题!你已经掌握了单正则的写法,要实现类似SQL里Name LIKE 'ABC' OR 'DFG'的逻辑,核心就是用MongoDB的$or操作符来组合多个正则条件。
基础实现(使用BasicDBObject)
如果你还在使用旧版驱动里的BasicDBObject,可以这样写:
import com.mongodb.BasicDBObject; import java.util.Arrays; // 分别构造两个正则查询条件:匹配包含ABC或DFG的name字段 BasicDBObject matchABC = new BasicDBObject("name", new BasicDBObject("$regex", "ABC")); BasicDBObject matchDFG = new BasicDBObject("name", new BasicDBObject("$regex", "DFG")); // 用$or操作符将两个条件组合成OR逻辑 BasicDBObject orQuery = new BasicDBObject("$or", Arrays.asList(matchABC, matchDFG)); // 执行查询(假设collection是你的MongoCollection实例) // DBCursor cursor = collection.find(orQuery);
进阶:不区分大小写的匹配
如果需要忽略大小写(类似SQL的LIKE '%abc%'不区分大小写),可以给正则加上$options: "i"参数:
BasicDBObject matchABC = new BasicDBObject("name", new BasicDBObject("$regex", "ABC").append("$options", "i")); BasicDBObject matchDFG = new BasicDBObject("name", new BasicDBObject("$regex", "DFG").append("$options", "i"));
新版驱动推荐写法(使用Document)
如果你用的是MongoDB 3.x及以上的驱动,官方更推荐使用Document类代替BasicDBObject,写法更简洁:
import org.bson.Document; import java.util.Arrays; Document matchABC = new Document("name", new Document("$regex", "ABC")); Document matchDFG = new Document("name", new Document("$regex", "DFG")); Document orQuery = new Document("$or", Arrays.asList(matchABC, matchDFG)); // 执行查询(新版驱动的写法) // FindIterable<Document> results = collection.find(orQuery);
简单说,$or操作符接受一个查询条件的数组,数组里的每个元素都会被当作独立的匹配条件,只要满足其中任意一个,文档就会被匹配到,完美对应SQL里的OR逻辑~
内容的提问来源于stack exchange,提问作者Ohad
相关产品推荐
相关产品推荐

