假设我有一组用户,并希望在这些用户的用户名上实现自动完成功能。我查看了mongodb文档,$ regex似乎是一种方法。有没有更好的办法?我表示更好的表现/更好的练习。
答案 0 :(得分:10)
正如@Thilo所建议的,你可以使用几个想法,包括前缀。
最重要的是要有非常快速的请求(因为您希望自动完成感觉非正常)。所以你必须使用将使用正确索引的查询。
使用regexp:使用/^prefix/
(重要的是^指定行的开头,这是使查询使用索引所必需的。)
范围查询也很好:{ $gt : 'jhc', $lt: 'jhd' } }
更复杂但更快:您可以使用以下条目在mongo(aka try)中存储前缀树:
{usrPrefix : "anna", compl : ["annaconda", "annabelle", "annather"]}
{usrPrefix : "ann", compl : ["anne", "annaconda", "annabelle", "annather"]}
这最后一个解决方案非常快(当然是compl上的索引)但根本不是空间效率。你知道你也有选择的权衡。
答案 1 :(得分:6)
我们使用正则表达式来做,只要你有一个索引并且使用/ ^ value /
它就很快请注意,您不能将不区分大小写的选项与索引一起使用,因此您可能希望将字符串的小写版本存储为文档中的另一个字段,并将其用于自动完成。
我已经完成了300万个文档的测试,但它仍然是即时的。
答案 2 :(得分:2)
如果您正在寻找前缀,您可以使用范围查询(不确定确切的语法):
db.users.find({'username': { $gt : 'jhc', $lt: 'jhd' } } )
并且您想要在用户名字段上添加索引。