MongoDB嵌套查询

时间:2015-10-19 10:59:16

标签: mongodb meteor

大家好我想做一个嵌套查询,但我无法弄清楚如何做到这一点。我想查看搜索结果中是否出现姓氏或名字,然后查看从中返回的用户是管道工。我坚持如何进行嵌套查询,在其中我可以看到第一个名称是搜索名称的子字符串还是姓氏是搜索名称的子字符串。任何帮助,将不胜感激。我用谷歌搜索,但我找不到解决这个问题的方法

Meteor.user.find({$and:[{"profile.type": "plumber"}, ? ]})

4 个答案:

答案 0 :(得分:1)

尝试这样的事情:

// search parameters
var search = 'son';
var type = 'plumber';

// regular expression based on the search with case ignored
var re = new RegExp(search, 'i');

// returns (type == 'plumber') AND
// (last contains 'son' OR first contains 'son')
var selector = {
  $or: [{'profile.firstName': re}, {'profile.lastName': re}],
  'profile.type': type
};

// fetch the users
var users = Meteor.users.find(selector).fetch();

您可能需要更改一些字段名称,例如我不知道您是否使用profile.firstName vs profile.firstname等等。

答案 1 :(得分:1)

聚合可能更好,但这应该有效:

db.user.find({"profile.type": "plumber", $or:[{"profile.name":/james/},{"profile.surname":/james/}]})

所以你有$或姓名和姓氏,所有这些都在管道工的一个大文件中。 / james /是正则表达式,请记住,你必须以某种方式处理大写字符。

答案 2 :(得分:0)

我认为您应该使用聚合管道。您可以输出 $ match 的输出,该输出会检查名字或姓氏,然后将其结果通过管道传输到第二个 $ match ,这会过滤掉管道工&#39 ;

答案 3 :(得分:0)

感谢各位帮助,但我有点这样做了

  t= Session.get("plumberSearchQuery").split(" ");

  regexQueryString = ".*" +t[0];
  for(var i = 1 ; i < t.length ; i++){
    if (t[i]!= ""){
      regexQueryString= regexQueryString+ "|"
      regexQueryString =regexQueryString+ t[i];
    }
  }
  regexQueryString = regexQueryString + "*."
 return results.find({ $and:[{"profile.type": "plumber"},{$or: [{"profile.firstName": {$regex: new RegExp(regexQueryString, "i")}} , {"profile.lastName": {$regex: new RegExp(regexQueryString, "i")}}]}]});