通过输入字段构建对集合的mongodb查询

时间:2015-05-24 11:59:25

标签: mongodb meteor

我有一个带有'名字'和'姓氏'字段的球员系列。

我正在寻找上面的集合,并有一个输入字段进行搜索。这可以正常搜索名字$或姓氏。但我希望能够在两者上搜索。

我读了另一个问题的答案,将两者合并为一个数组。我已经完成了,但它仍然搜索或。

 return Players.find({ playerSearch_index: new RegExp(search, 'i')};

示例文档:

 {
firstName: "David",
lastName: "Smith",
playerSearch_index: [David,Smith],
location: "London",
Country: "England",
score: 0
}

搜索只是通过< input type =“text”class =“form-control”id =“searchbox”/>

示例搜索是'David',它应该返回所有Davids。 '史密斯'应该归还所有史密斯 大卫史密斯应该归还所有'大卫'+'史密斯'

它在keyup上运行:

 Template.searchbar.events({
'keyup #searchbox': function(evnt, tmpl){
  Session.set('search', $('#searchbox').val());
}
});

2 个答案:

答案 0 :(得分:0)

如何使用第三个字段“fullname”并搜索:

return Players.find({ fullname: { $regex: new RegExp(search, 'i')}});

答案 1 :(得分:0)

如果我理解你的话:

让我们说你想找"马丁"在两个领域

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

return Players.find({$or:{[{firstname:query},{lastname:query}]}});

如果你想寻找" john doe"在这两个领域,你都会做到

var queryArr = value.split(" ");//value is "john doe"

//we delete the empty string "" or we will get a * (all) query
queryArr = _.compact(queryArr);

queryArr = queryArr.map(function(queryStr){
  return new RegExp(queryStr,'i');
  }
);
return Players.find({$or:{[{firstname:{$in : queryArr}},{lastname:{$in : queryArr}}]}});

// edit:使用尾随空格的查询字符串无法正常运行