2016-03-03 40 views
1

我正在尋找一種方法來在我的MongoDB上搜索文本來轉義某些字符。Mongo數據庫:搜索文本轉義某些字符

例如:

在收集contacts存在字段爲 「john.doe」 的文件name

{ 
    _id: ID 
    ... 
    name : "john.doe", 
    ... 
} 

( 「john.doe」 可以是 「j.ohndoe」 或「 johndoe「或」jo.hn.do.e「,你的名字)

我想找到它搜索」johndoe「,不僅」john.doe「(忽略」。「)。直接使用findOne會很好。

有沒有辦法做到這一點?

非常感謝:)

回答

0

我不認爲這是可能的使用純粹的MongoDB查詢。但是,您可以將MongoDB映射減少以獲取過濾的文檔或在客戶端執行此類操作。我知道這不是一個優雅的解決方案,但至少會起作用。

請參閱https://docs.mongodb.org/manual/core/map-reduce/

function findByKey(key) 
{ 
    var keys = 
    db.contacts.mapReduce(function(){ 
     var re = /\./igm; 
     var txt = this.name.replace(re,""); 
     var re = new RegExp(u_name); 

     if(re.exec(txt)!= null) 
     { 
      emit(1, this._id); 
     } 
    }, function(k, v){ 
     return {keys: v}; 
    }, 
    { 
     out:{inline:true}, 
     scope: {u_name:key} 
    }); 

    if(keys.results.length > 0) 
    { 
     var arKeys = keys.results[0].value.keys; 
     return db.contacts.find({_id:{$in: arKeys}}); 
    } 
    else 
    { 
     return null; 
    } 
}; 

var data = findByKey("john doe"); 

上面的腳本運行後,可變數據將舉行有「李四」,包括j.ohn.doejohn.doe所以忽略所有時期所有文件。