2012-07-19 63 views
1

我刚刚开始使用MongoDB! 正在试用这里支持的各种搜索功能。如何使用Java在MongoDB中执行通配符搜索

我可以搜索一个文件,说包含名称= MongoDB中使用下列选项(不考虑的情况下) - goDB,蒙戈。计划在以下选项中搜索文档 - Mon * DB,* on * DB。也就是说,在同一个搜索文本中有多个通配符。

任何指针,将不胜感激!

回答

5

你可以做一个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);