2015-05-24 50 views
0

我有一个带有“名字”和“姓氏”字段的玩家合集。通过输入字段构建对收集的mongodb查询

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

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

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 = “文本” 类= “形式控制” ID = “搜索框”/>

一个示例性搜索是'大卫'应该返回所有的大卫。 “史密斯”应该返回所有史密斯 大卫·史密斯应该返回所有谁是“大卫” +“史密斯”

它运行在KEYUP:

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

functionning你能更新你的问题,包括一个示例文件和“搜索”值? – JohnnyHK

+0

谢谢约翰尼,更新。 – nsdc20

回答

0

如何具有第三场“全名”和搜索它具有:

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

如果我理解你还有:

比方说您要寻找的“马丁”,在这两个领域

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

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

如果你想寻找在这两个领域“李四”,你会做

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

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

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

//编辑:未正确使用查询字符串结尾有空白

+0

现在开始工作,但是我遇到了更多的流星事物,我猜...它可以工作,对第一个单词,然后我按空格,它会再次显示所有结果,直到输入下一个字母为止然后按第二个字过滤。任何想法? – nsdc20