2016-11-14 51 views
0

我正在嘗試在流星中創建一個搜索功能。我正在搜索具有特定屬性的Mongo集合中的項目。在流星模板中對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

Thanks for answers guys。對不起,如果我的意圖不清楚,但我想讓那些可以使用兩種語言的人都不在數據庫中。 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(); 
} 

這樣就很容易用新的語言

擴大
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); 
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'}); 
}