java - 如何使用 Java 在 MongoDB 中执行通配符搜索

标签 java mongodb wildcard

我刚刚开始使用 MongoDB! 正在尝试使用此处支持的各种搜索功能。

我可以搜索一个文档,比如包含 name=MongoDB 并带有以下选项(不考虑大小写)- goDB、Mongogo。正在努力在以下选项中搜索文档 - Mon*DB、*on*DB。也就是说,在同一个搜索文本中有多个通配符。

如有任何指点,我们将不胜感激!

最佳答案

你可以做一个Regular expression在 Mongo 中匹配字段,这是您如何执行第一个模式:

Pattern p = Pattern.compile("Mon.*DB", CASE_INSENSITIVE);
BasicDBObject query = new BasicDBObject("name", p);

// finds all records with "name" matching /Mon.*DB/i
DBCursor cursor = collection.find(query);

不过要小心,许多正则表达式匹配需要全表扫描。这意味着如果您针对大型集合运行它们,引擎将不得不遍历所有文档(可能会打到磁盘)并单独检查每个文档是否匹配。这比使用索引的查询要慢得多。

唯一会命中索引的正则表达式是区分大小写的前缀匹配。您可以像这样搜索所有“Mon*”并使用索引:

Pattern p = Pattern.compile("^Mon.*");
BasicDBObject query = new BasicDBObject("name", p);

// finds all records with "name" matching /^Mon.*/
DBCursor cursor = collection.find(query);

关于java - 如何使用 Java 在 MongoDB 中执行通配符搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11552976/

相关文章:

java - 如何在 SocketChannel 关闭时收到通知?

java - 是否可以添加另一个字段来查找和过滤 java 中 mongodb 数据库的结果?

Mysql 选择所有与字符串中的数字匹配的内容

java - 导入的 jar 可以完美编译,但会出现运行时错误

java - 文件没有上传到Java中的Ftp服务器上?

javascript - 将用户发布到其他集合时出现问题

db2 - SQL LIKE 列值加通配符 DB2

T 和 ? 之间的 Java 泛型区别?延伸 T

java - 跨团队强制执行 Github 存储库的编码标准

kubernetes 更新后,kubernetes 上的 mongodb StatefulSet 不再工作