使用meteor js在mongoDB中搜索多个字段

时间:2015-12-11 07:42:27

标签: meteor

大家好日子。 我是编程的初学者,有兴趣学习Meteor Js。我想按关键字或字母搜索category_name和subcategory_name。我希望有人可以帮助/指导我解决问题。你的帮助真的很感激。提前致谢。 :)

这是我的代码。

    enter code here

collections: subcategory
{
_id:"ZbwCsJEMi2DesyJA7",
category_name: "ICT",
subcategory_name: "Laptop"
}

subcategory.js

Template.Subcategory.events({
     "keyup .searchbox": function(event){
           var query = event.target.value;
           Session.set('query', query);
     }
});

Template.Subcategory.helpers({
     subcategory: function(){
         var filter = {sort: {}};
         var query = Session.get('query');
         filter.sort[Session.get('sortby')] = 1;
         return Subcategory.find({ subcategory_name: new RegExp(query, 'i')} , filter );

         }
});

2 个答案:

答案 0 :(得分:1)

您必须在Mongo中创建文本索引。你可以在Meteor中做到这一点我仍然想到这样的事情:

MyCollection._ensureIndex({
  "$**": "text"
});

以上使用通配符,但您可以更具体。有关详细信息,请参阅https://docs.mongodb.org/v3.0/core/index-text/

对于较大的集合,我倾向于通过订阅传递文本搜索查询,以便可以在服务器上执行。

假设您要显示一系列内容并允许用户使用搜索框过滤它们,您可以执行以下操作:

Meteor.publish('MyCollection', function (searchTerm) {

  return searchTerm ? MyCollection.find() : MyCollection.find({ $text: {$search: searchTerm} });

});

在客户端上,假设您正在使用模板级订阅,您可以像这样设置订阅:

Template.Subcategory.onCreated(function(){
   var self = this;

   // requires the reactive-var package
   self.searchTerm = new ReactiveVar(false);

   self.autorun(function(){
        self.subscribe( "MyCollection", self.searchTerm.get() );
    });

});

然后只是设置搜索字词的情况:

Template.Subcategory.events({
    'keyup .searchbox': function(e,t){
        var inputValue = e.currentTarget.value,
            //you could set an arbitrary minimum search term length like so
            searchTerm = inputValue.length > 1 ? inputValue : false;
        t.searchTerm.set(searchTerm);
    }
});

有很多关于如此依赖订阅的警告。例如,如果您的集合在客户端上全局范围,那么您可能会有多次订阅同一集合的风险,从而为您提供可能不希望在列表中呈现的结果。不过,我非常喜欢这种方法。值得深思。

答案 1 :(得分:1)

好像您正在寻找$or运营商:

var queryRegexp = new RegExp(query, 'i');

return Subcategory.find({
    $or: [
        { category_name: queryRegexp },
        { subcategory_name: queryRegexp }
    ]
} , filter);

Mongo官方文档的$或:https://docs.mongodb.org/manual/reference/operator/query/or/