【问题标题】:Constructing mongodb queries on collection via input field通过输入字段在集合上构造 mongodb 查询
【发布时间】:2015-05-24 11:59:25
【问题描述】:

我有一个包含“名字”和“姓氏”字段的球员集合。

我希望搜索上述集合并有一个输入字段进行搜索。这可以很好地搜索名字 $ 或姓氏。但我希望能够同时搜索两者。

我阅读了另一个问题的答案,将两者组合为一个数组。我已经这样做了,但它仍然会搜索 or。

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

示例文档:

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

搜索只是通过

一个示例搜索是“大卫”,它应该返回所有大卫。 'Smith' 应该返回所有 Smiths 大卫史密斯应该返回所有“大卫”+“史密斯”

它在 keyup 上运行:

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

【问题讨论】:

  • 您能否更新您的问题以包含示例文档和search 值?
  • 谢谢约翰尼,更新了。

标签: mongodb meteor


【解决方案1】:

如何拥有第三个字段“全名”并使用以下内容进行搜索:

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

【讨论】:

    【解决方案2】:

    如果我理解你的话:

    假设您想在两个字段中查找“martin”

    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 : 使用尾随空格的查询字符串无法正常运行

    【讨论】:

    • 现在开始起作用了,但是我遇到了其他东西,我猜它更像是流星……它起作用了,在第一个单词上,然后我按空格键,它再次显示所有结果,直到输入下一个字母,然后按第二个单词过滤。有什么想法吗?
    猜你喜欢
    • 2012-10-21
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    相关资源
    最近更新 更多