现在我有类似于
的东西 var cursor = self.apos.docs.find(req, { highSearchText: {$regex: new RegExp(self.apos.utils.regExpQuote(req.query.search), 'i') } } )
cursor.queryToFilters({ highSearchText: {$regex: new RegExp(self.apos.utils.regExpQuote(req.query.search), 'i') } }, 'public')
.perPage(self.perPage);
我正试图找出实施autocomplete
的方法答案 0 :(得分:1)
如你所知,我是P' unk Avenue的撇号团队负责人。
你的方式,方式,方式太难(:
为您的搜索字段命名"自动填充"在你的形式。
然后这样做:
var cursor = self.apos.docs.find(req, {})
.queryToFilters(req.query, 'public')
.perPage(self.perPage);
};
真的......那就是它。 queryToFilters
的全部目的基本上就是这样做(不完整,请参阅下面的安全说明,了解它的真正含义):
// DON'T DO THIS, JUST GIVES YOU AN IDEA OF WHAT'S GOING ON
_.each(req.query, function(val, key) {
cursor[key](val);
});
它调用与req.query
的属性同名的游标方法(好吧,差不多)。
当然这是不安全的,但是queryToFilters
专门确保有问题的方法是标记为safeFor: 'public'
的游标过滤器并运行它们的消毒剂。
autocomplete
就是这样一个光标过滤器,所以...热潮,我们已经完成了。
另外,我发现您正在与self.apos.docs.find
直接合作。我假设您这样做是因为您希望所有类型的文档都从查询中返回,在这种情况下,您正在做正确的事情。
如果不清楚,如果您首先不使用查询字符串,则可以直接使用您拥有的任何内容直接调用autocomplete
:
cursor.autocomplete('startofaword');
希望这有用!