动态地在find()中分配mongo选择器

时间:2014-12-25 14:11:20

标签: mongodb meteor meteor-helper

我有以下问题:我有一个界面,用户可以根据几个输入过滤掉东西。有5个输入。填写输入时,我想将它的值添加到返回集合的助手中。我无法解决的问题是如何动态地执行此操作。有时用户可能会填写一个输入,有时是三个,有时是全部5.在find()方法中,你只能写下meteor的语法:

mongoSelector: fieldName,

这意味着您只能对find()中的内容进行硬编码。但是添加所有5个选择器都不起作用,因为如果其中一个值为空,则find会搜索空字符串而不是空字符串。

我想过做条件或变量,但由于所需的语法,两者都不能在find中工作。我该怎么做才能解决这个问题?

var visitorName;
var visitorAge;
Session.set('visitorName', visitorName);
Session.set('visitorAge', visitorAgee);


Template.web.helpers({
    visitors: function() {
        return Visitors.find({ visitor_name: Session.get('visitorName'), visitor_age: Session.get('visitorAge') });
    }
});


Template.web.events({
  "change #visitor_name": function (event, template) {
    visitorName = $(event.currentTarget).val();
  }
});



Template.web.events({
  "click #reset_filter": function (event, template) {
    return Visitors.find();
    $(input).val('');    
  }
});

1 个答案:

答案 0 :(得分:1)

http://jsfiddle.net/m5qxoh3b/

这个有效

Template.web.helpers({
    visitors: function() {
        var query = {};

        var visitorName = (Session.get('visitorName') || "").trim();
        if (visitorName) {
            query["visitor_name"] = visitorName;
        }
        //same thing for other fields

        return Visitors.find(query);            
    }
});



Template.web.events({
  "change #visitor_name": function (event, template) {
      var visitorName = $(event.currentTarget).val();
      Session.set('visitorName', visitorName);
  }
});