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

如何使用Java在MongoDB中执行通配符搜索,java,mongodb,wildcard,Java,Mongodb,Wildcard,我刚开始使用MongoDB! 正在试用这里支持的各种搜索功能 我可以搜索一个文档,比如包含name=MongoDB,并使用以下选项(不管大小写)-goDB、Mongo、go。使用以下选项搜索文档:Mon*DB、*on*DB。也就是说,在同一搜索文本中有多个通配符 任何提示都将不胜感激 您可以在Mongo中对字段进行匹配,以下是您如何执行第一个模式: Pattern p = Pattern.compile("Mon.*DB", CASE_INSENSITIVE); BasicDBObject qu

我刚开始使用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);
您可以在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);