如何使用nodejs在mongodb集合中search重音字符
MongoDB将E和E视为两个独立的东西,所以当我searchE时,它不会findE。
有没有办法让MongoDB把它们看成是一回事?
我在跑步
var find =Users.find(); var re = new RegExp(name, 'i'); find.where('info.name').equals(re);
如何匹配包含重音字符的string并获得结果?
mongodb
不支持这个function,我怀疑它是否会在不久的将来。 你可以做的是在每个包含每个名字的简单forms的文档中存储一个不同的字段,以小写字母表示 。
{ info:{"name":"Éva","search":"eva"}; } { info:{"name":"Eva","Search":"eva"} }
当你有你的文档结构,你有一些优势,
您可以在字段search
创build一个索引,
db.user.ensureIndex({"Search":1})
并激发一个简单的查询,find匹配。 当您search特定的术语时,将该术语转换为简单的forms,然后将其转换为小写,然后执行查找。
User.find({"Search":"eva"});
这也将使用索引, regex
查询不会。
另请参见: Mongodb将重音字符作为基础字符
但如果你想这样做的话,这是不推荐的。 只是为了logging我在这里发布,
你需要在简单的字母和可能的重音forms之间有一个映射。 例如:
var map = {"A":"[AÀÁÂÃÄÅ]"};
假设search词是a
,但是数据库文档具有重音forms,那么在将其传递给find()
查询之前,您需要自己构build一个dynamic正则expression式。
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}})
请注意,所描述的示例也可以处理length > 1
的search词。