我正在使用mizzao/meteor-autcomplete以便在您键入查询时从MongoDB集合返回匹配的项目。
如果我只搜索一个字段,我就能成功完成此操作,但它不允许我搜索同一个集合的多个字段。
我试图这样做:
Template.foo.helpers({
settings: function() {
return {
position: 'bottom',
limit: 5,
rules: [
{
collection: Models,
field: 'name',
matchAll: true,
template: Template.standardLegends,
},
{
collection: Models,
field: 'createdBy',
matchAll: true,
template: Template.standardLegendsOwner,
},
],
};
},
});
我查看了github开放问题,并且有一个类似的问题,他们说使用选择器函数来返回多个字段,但我真的不能理解我是什么应该做的。
以下是该主题的链接: https://github.com/mizzao/meteor-autocomplete/issues/13
进一步说明
以下是从我的模型集合返回的数据集的示例:
0:
_id:"KwTZmBC5qBcwK7kzR"
name:"drillCase.stl"
units:"mm"
createdBy:"Bob M"
createdDate:"Tue Aug 29 2017 03:19:10 GMT-0400 (EDT)"
1:
_id:"ljknbgwlkejb56"
name:"cone.stl"
units:"mm"
createdBy:"Michael C"
createdDate:"Tue Aug 29 2017 03:45:10 GMT-0400 (EDT)"
以下是我目前用于显示自动填充结果的模板:
<template name="standardLegendsOwner">
<span class="fieldName" style="width: 500px">{{name}}</span>
</template>
所以,让我们说我想要返回与“已创建”相关的所有项目&#39;价值观&#39; Bob M&#39;。现在,如果我键入Bob M,我会返回&#39; drillCase.stl&#39;相反,因为我们正在搜索名称&#39;字段和模板中我们返回的名称&#39;值。
所以我的问题是,是否有可能在模板内部设置一个条件语句,如果您匹配的字段是&#39; name&#39;返回名称值,否则返回&quot; createdBy&#39;值。
我现在遇到的问题是,如果我输入Bob M.并且他与多个对象相关联,那么它将返回与他匹配的第一个值。
答案 0 :(得分:0)
selector
函数基本上需要返回query
要使用的.find()
对象。要查看多个字段,您还需要$or:
Template.foo.helpers({
settings() {
return {
position: 'bottom',
limit: 5,
rules: [
{
collection: Models,
field: 'name',
matchAll: true,
template: Template.standardLegends,
selector(match) {
regex = new RegExp(match, 'i')
return {$or: [{'name': regex}, {'createdBy': regex}]}
},
}
],
};
},
});
我阅读了mizzao的文档:自动完成了一点,并意识到它实际上返回了匹配文档中的所有字段。这意味着您在结果模板中具有很大的灵活性。例如,你可以这样做:
<template name="standardLegendsOwner">
<span class="fieldName" style="width: 500px">{{name}} - {{createdBy}}</span>
</template>
因为您知道其中一个字段是匹配的。您还可以编写一个帮助程序,准确创建您想要查看的内容。