【问题标题】:Applying multiple filters on Mongo collection in Meteor template在 Meteor 模板中对 Mongo 集合应用多个过滤器
【发布时间】:2017-03-27 20:20:00
【问题描述】:

我正在尝试在 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();
    }
}
});

过滤器正常工作,但我如何同时应用多个过滤器,例如在上面的代码中返回可以俄语和英语的人?

【问题讨论】:

    标签: node.js mongodb meteor collections filter


    【解决方案1】:

    谢谢大家的回答。对不起,如果我不清楚我的意图,但我想把可以两种语言的人从数据库中取出。 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(); 
    }
    

    这样可以很容易地用新的语言进行扩展

    【讨论】:

      【解决方案2】:

      在这里我添加了两个条件。请根据需要选择。

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

      【讨论】:

        【解决方案3】:

        有不止一种方法可以做到这一点,您可以使用$or$in Mongo 运算符。我更喜欢使用 $or:

        const selector = {
          $or: [],
        };
        
        if (canEnglish) {
          selector.$or.push({'profile.grammarskills': 'english'});
        }
        
        if (canRussian) {
          selector.$or.push({'profile.grammarskills': 'russian'});
        }
        
        return Meteor.users.find(selector);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-03
          • 1970-01-01
          • 1970-01-01
          • 2015-02-23
          • 1970-01-01
          • 1970-01-01
          • 2018-11-27
          • 1970-01-01
          相关资源
          最近更新 更多