我正在尝试在Meteor中创建搜索功能。我正在搜索具有特定属性的Mongo集合中的项目。
我的过滤器是反应变量,如下所示:
this.canEnglish = new ReactiveVar(false);
this.canRussian = new ReactiveVar(false);
然后我尝试将这些反应变量用作集合上的过滤器。
Template.Search.helpers({
profiles: ()=> {
if(Template.instance().canEnglish.get()) {
return Meteor.users.find({'profile.grammarskills': 'english'});
} else if(Template.instance().canRussian.get()) {
return Meteor.users.find({'profile.grammarskills': 'russian'});
} else {
return Meteor.users.find();
}
}
});
过滤器的工作方式应该如此,但是如何同时应用多个过滤器,例如在上面的代码中返回可以包含俄语和英语的人?
答案 0 :(得分:0)
有多种方法可以执行此操作,您可以使用$or或$in Mongo运算符。我更喜欢使用$或:
const selector = {
$or: [],
};
if (canEnglish) {
selector.$or.push({'profile.grammarskills': 'english'});
}
if (canRussian) {
selector.$or.push({'profile.grammarskills': 'russian'});
}
return Meteor.users.find(selector);
答案 1 :(得分:0)
这里我添加了两个条件。请根据您的需要选择。
1.//Atleast know one language.
if(canEnglish || canRussian) {
return Meteor.users.find({$or:['profile.grammarskills': 'english','profile.grammarskills': 'russian']});
2.//Know both the language
} else if(canEnglish && canRussian) {
return Meteor.users.find({'profile.grammarskills': 'english','profile.grammarskills': 'russian'});
}
答案 2 :(得分:0)
谢谢你的回答。很抱歉,如果我不清楚我的意图,但我想让那些可以使用这两种语言的人从数据库中获取。 Pankaj很接近,但我选择以不同方式解决问题
var selector = [];
if(canEnglish) {selector.push('english');}
if(canRussian) {selector.push('russian');}
if(selector.length > 0) {
return Meteor.users.find({'profile.grammarskills': { $all: selector}});
} else {
return Meteor.users.find();
}
通过这种方式,可以轻松地使用新语言进行扩展