2012-07-19 61 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);