如何使用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词。