2013-08-20 61 views
3

我在蒙戈使用不同在jQuery的自動完成返回一些價值觀是這樣的:區分節點JS的MongoDB不區分大小寫

function Reg(title) 
    { 
     this.title= title; 
    } 

exports.find = function(req, res) { 
var b=req.params.search; 
var query = new Array(); 
var cadsrch = b.split(' '); 
var l = cadsrch.length; 
var i = 0; 
     for (i = 0; i < l; i++) { 
      if(cadsrch[i]!=''){ 
       query[i]=new RegExp('^'+cadsrch[i], 'i'); 
      } 
     } 

var data=new Array(); 
     db.collection('publication', function(err, collection) { 
       collection.distinct('title',{content:{'$all':query}},{'$or':[{type:'an'},{type:'pub'}]}, 
        function(err, items) { 
         var l=items.length,i=0; 
         for (i=0;i<l;i++){ 
          data[i]=new Reg(items[i]); 
         } 
         res.jsonp(data); 
         } 
       ) 
     }); 
}; 

的問題是,列「標題」工作在大小寫敏感的,我的意思是例如汽車與Car不同,我不知道是否有辦法避免這種情況,並採取與汽車相同的方式

回答

2

這是MongoDB聚合框架中「$ downcase」運算符的一個絕妙例子;但目前尚不存在。

您可以做的最好的做法是爲每個文檔存儲一個可搜索的,標題較低的版本。因此,您的架構看起來像:

{ 
    title: "War and Peace", 
    searchable_title: "war and peace" 
} 

您的查詢邏輯將downcase值查詢搜索的標題之前。對於縮放,請遠離大小寫不敏感的正規表達式,並使用縮小的標題。

5

我剛剛看到這個問題,但我知道它已被回答,但爲了將來的參考,有和是,「$ downcase」;它被稱爲$toLowerhttp://docs.mongodb.org/manual/reference/aggregation/toLower/#exp._S_toLower

db.c.aggregate([ 
    {$group:{_id:{$toLower:'$title'}}} 
]); 

有一個問題,雖然,你無法通過的情況下insenstive搜索直到有大小寫不敏感指標實現:https://jira.mongodb.org/browse/SERVER-90。這意味着你現在必須像現在這樣通過不區分大小寫的正則表達式來處理。