2010-11-01 121 views

回答

14

當我有確切的問題,我無法忽視的情況下進行查詢。我最終複製了我想要搜索的值,使其正常化。在這種情況下,您可以創建一個新的屬性並將其轉換爲小寫字母並且具有一個索引。

編輯:

DBObject ref = new BasicDBObject(); 
ref.put("myfield", Pattern.compile(".*myValue.*" , Pattern.CASE_INSENSITIVE)); 
DBCursor cur = coll.find(ref); 

不知是否可行?

+0

這是1.4版本的方式。也許事情現在已經改變了。 – 2010-11-01 13:41:21

+1

使用控制檯,我意識到輸入db.collection.find({「prop」:/ value/i})會使我的查詢大小寫不敏感。必須有一種方法來使用Java驅動程序啓用「我」屬性,即使通過正則表達式查詢它並不重要。鍵入DBObject query = new BasicDBObject(「prop」,「/」+ value +「/ i」)不起作用。 – Mark 2010-11-01 13:44:42

+0

試試看。我希望它能找到你想要的。 – 2010-11-01 13:52:38

0
db.iolog.find({$where:"this.firstname.toLowerCase()==\"telMan\".toLowerCase()"}); 
DBObject ref = new BasicDBObject(); 
ref.append("firstname", new BasicDBObject("$where","this.firstname.toLowerCase()=="+firstname+".toLowerCase()")); 
-1
mapValue = new HashMap<String, Object>(); 
mapValue.put("$options", "i"); 
mapValue.put("$regex", "smth"); 
searchMap.put("name", mapValue); 
collection.find(new BasicDBObject(searchMap)); 
3

萬一如果你使用下面提到Spring的Java是可以使它在不區分大小寫的搜索方式。

public List<Discussion> searchQuestionByText(String qText){ 
     Query query = new Query(); 
     query.addCriteria(Criteria.where("discussionName").regex(qText,"i")); 
     return mongoTemplate.find(query, Discussion.class);  
    } 
0

我也試圖最好地使用「不區分大小寫」的實現。 如果您使用的是MongoDB Java driver 3.0或更高版本,則應使用以下代碼,並使用$ option參數!它非常容易使用:

Document basicQuery = new Document(); 
basicQuery.append("key", new Document("$regex","value").append("$options","i")); 

「key」和「value」字段需要用您自己的數據進行更改。 (我還建議你使用$ regex參數進行搜索,以便通過部分匹配檢索信息,如果數據庫中有更多記錄)。

相關問題