2014-05-23 46 views
1

我的以下find查詢在小寫情況下不起作用。如果收集中的值是大寫&,我通過的是小寫字母不給出結果。Mongo DB - 小寫查找

如何覆蓋區分大小寫的行爲?

User.find({ 
     $or: 
     [ 
      { 'basicinformation.firstname': { '$regex': firstname + '.*' } }, 
      { 'basicinformation.lastname': { '$regex': lastname + '.*' } } 
     ] 
    } 
+0

可能重複的[MongoDB:是否有可能使區分大小寫的查詢?](http://stackoverflow.com/questions/1863399/mongodb-is-it-possible-to-make-a-case-不敏感查詢) – WiredPrairie

+0

我看到了這個問題......答案與我的要求不符。 – Anup

+0

事實上,它有好幾次重複的答案,並且在MongoDB中使用不區分大小寫的搜索是一個性能問題。 '/我'是忽略大小寫。 – WiredPrairie

回答

2

添加$options$regex操作:

User.find({ 
    $or: 
    [ 
     { 
      'basicinformation.firstname': { 
       '$regex': firstname + '.*', '$options': 'i' 
      } 
     }, 
     { 
      'basicinformation.lastname': { 
       '$regex': lastname + '.*', '$options': 'i' 
      } 
     } 
    ] 
} 

所以"i"存在使得搜索不區分大小寫。請注意,即使您將^正則表達式錨定到字符串的開頭,調用不區分大小寫的搜索也會強制進行索引掃描。

因爲這可能會對您的表現產生很大的影響,所以請考慮其他選項,例如文本搜索索引和查詢,或者在附加字段或輸入內修改大小寫,如果可以避開,則以單個格式存儲。

+0

工程很棒..! Thankx ...! – Anup

+0

我還有1個問題....如果用戶鍵入'a'&搜索它.....他應該得到結果的名字從'a' ....開始......但在我當前的查詢中,它檢查完成名稱,如果有'a'則顯示全部。 – Anup

+0

@你在正則表達式的開頭使用錨定插入符號或'^'字符來匹配字符串的開頭。當您發佈評論時,我已經通過更多信息對此進行了評論。 –