Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用nodejs在mongodb集合中搜索重音字符_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript 如何使用nodejs在mongodb集合中搜索重音字符

Javascript 如何使用nodejs在mongodb集合中搜索重音字符,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,MongoDB将É和E视为两个独立的事物,因此当我搜索E时,它不会找到É 有没有办法让MongoDB将它们视为同一件事 我在跑步 var find =Users.find(); var re = new RegExp(name, 'i'); find.where('info.name').equals(re); 如何匹配包含重音字符的字符串并获得结果?此功能在mongodb中不受支持,我怀疑它是否会在不久的将来出现。您可以克服的是在每个文档中存储一个不同的字段,该字段包含每个名称的简单形式,使

MongoDB将É和E视为两个独立的事物,因此当我搜索E时,它不会找到É

有没有办法让MongoDB将它们视为同一件事

我在跑步

var find =Users.find();
var re = new RegExp(name, 'i');
find.where('info.name').equals(re);

如何匹配包含重音字符的字符串并获得结果?

此功能在
mongodb
中不受支持,我怀疑它是否会在不久的将来出现。您可以克服的是在每个文档中存储一个不同的字段,该字段包含每个名称的简单形式,使用小写

{
  info:{"name":"Éva","search":"eva"};
}

{
  info:{"name":"Eva","Search":"eva"}
}
当你有了这样的文档结构,你就有了一些优势

您可以在字段
搜索
上创建索引

db.user.ensureIndex({"Search":1})
并启动一个简单的查询,以查找匹配项。搜索特定术语时,请将该术语转换为其简单形式,并转换为小写形式,然后进行查找

User.find({"Search":"eva"}); 
这也将利用索引,而
regex
查询不会利用索引

另见:

但是如果你想用艰难的方式去做,这是不推荐的。只是为了记录我把它贴在这里

您需要在简单字母表和它们可能的重音形式之间建立映射。例如:

var map = {"A":"[AÀÁÂÃÄÅ]"};
假设搜索词是
a
,但数据库文档有其重音形式,那么,在将其传递给
find()
,查询之前,您需要自己构建一个动态正则表达式

var searchTerm = "a".toUpperCase();
var term = [];
for(var i=0;i<searchTerm.length;i++){
    var char = searchTerm.charAt(i);
    var reg = map[char];
    term.push(reg);
}

var regexp = new RegExp(term.join(""));

User.find({"info.name":{$regex:regexp}})
var searchTerm=“a”.toUpperCase();
var项=[];

对于(var i=0;i 1

谢谢您的回复。您能建议如何使用regex进行快速修复吗?@dreamhigh,我已经更新了我的答案。但这不是您需要处理这种情况的方式。您需要重新组织文档并重新编制索引以获得更好的性能。您应该遵循第一种方法。