MongoDB通过匹配所有值的电子邮件地址进行全文搜索,可能的修复相对来说花费了太多时间



当尝试搜索部分电子邮件地址时,我看到一个问题-

当我搜索包含域的电子邮件地址的一部分时(例如-"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的电子邮件,你应该不会从中得到任何回复

最新更新