2016-03-03 94 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所以忽略所有时期所有文件。