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

时间:2012-07-19 02:07:48

标签: java mongodb wildcard

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

我可以搜索包含name = MongoDB的文档,其中包含以下选项(无论情况如何) - goDB,Mongo go 。努力在以下选项中搜索文档 - Mon * DB,* on * DB。也就是说,在同一搜索文本中使用多张外卡。

任何指针都将不胜感激!

1 个答案:

答案 0 :(得分:6)

你可以在Mongo的字段上进行Regular expression匹配,这里是你如何做你的第一个模式:

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);