我正在寻找一种方法来搜索我的MongoDB上的文字,以逃避一些角色。
例如:
在集合contacts
中有一个带有" john.doe"的文档。在字段name
{
_id: ID
...
name : "john.doe",
...
}
(" john.doe"可能是" j.ohndoe"或" johndoe"或" jo.hn.do.e&#34 ;,你的名字)
我想找到它来搜索" johndoe",不仅仅是" john.doe" (忽略"。")。直接使用findOne
。
有办法做到这一点吗?
非常感谢:)
答案 0 :(得分:0)
我认为使用纯粹的MongoDB查询是不可能的。但是,您可以使用MongoDB map reduce来获取过滤文档或在客户端执行此类操作。我知道这不是一个优雅的解决方案,但至少会起作用。
请参阅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");
在运行上面的脚本之后,可变数据将保存所有包含" john doe"包括j.ohn.doe
或john.doe
,因此忽略所有时段。