当尝试搜索部分电子邮件地址时,我看到一个问题-
当我搜索包含域的电子邮件地址的一部分时(例如-"prateeknar@gma"当电子邮件ID为"prateeknar@gmail.com"(,我得到了集合中的所有记录。
db.getCollection('Employee').find({$text:{$search:"prateeknar@gm"}}) -. returns all records in the collection
然而,当我只搜索用户名或后面跟着"2"的用户名(例如"prateeknar"或"prateknar@"(时,我会得到正确的结果。
db.getCollection('Employee').find({$text:{$search:"prateeknar"}}) -. returns the results properly
正如@AlexBlex所指出的,用双引号分隔是一种解决方案。这解决了问题,但增加了很多延迟。我们能以其他方式减少延迟吗?
问题出在哪里?我该怎么解决这个问题?
使用正则表达式搜索
参考链接:mongoRegex
db.Employee.find({email:{$regex:"text"}})
尝试删除文本索引,并对您的电子邮件文件进行正常索引。
然后你可以做一个简单的正则表达式来找到它
db.getCollection('Employee').find({email:/^prateeknar@gm/})
如果某个字符串与集合中的某个字符串匹配,则Mongo DB按索引搜索将返回true
当您搜索"strong"时;Prateekanar",只有一个文档与该匹配
然而,当您搜索"strong"时;prateeknar@gm"可能你的大多数文档都匹配@gm,mongo也在返回这些文档,试着添加一些不是gmail的电子邮件,你应该不会从中得到任何回复