我刚刚开始使用 MongoDB!正在尝试此处支持的各种搜索功能。
我可以搜索一个文档,比如包含 name=MongoDB 并带有以下选项(无论哪种情况) - goDB、Mongo、go。努力在以下选项中搜索文档 - Mon*DB、*on*DB。也就是说,在同一搜索文本中有多个通配符。
任何指针将不胜感激!
您可以对 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);