2015-10-19 181 views
0

你好我想做一个嵌套查询,但我不知道如何去做。我想查看是否在搜索结果中出现姓氏或名字,然后看到从它返回的用户是管道工。我被困在如何做一个嵌套查询,我可以看到,如果第一个名称是搜索名称的子字符串或姓氏是搜索名称的子字符串。任何帮助,将不胜感激。我已经使用Google搜索,但我找不到解决这个问题的方法MongoDB嵌套查询

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

这是写的伪代码将使问题很多更清晰的情况下。那么让我们假设用户输入“son” - 你想要匹配用户,例如名字或者“Wilson”,或者“Robinson”的姓氏吗?我对管道工的要求感到困惑 - 你只想搜索水管工还是首先想要一个结果集? –

+0

@DavidWeldon用户的类型是水管工,从他们那里我必须得到那些有他儿子名字的元素。 或者我们可以这样说,我们得到的用户的名字有他们的儿子像罗宾逊或威尔逊,然后从那个结果我们得到那些谁是管道工 – Gardezi

回答

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")}}]}]}); 
0

我想你应该为此使用聚合管道。你可以管一个$匹配这将检查该过滤器“管道工”

+0

你可以给我一个例子 – Gardezi

+0

检查mongodb文档。搜索聚合管道和$匹配。 – Constantine

+0

有一件事我想知道是否有一种方法来检查一个字符串是否包含字段的值? – Gardezi

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

聚集可能是更好的,但这应该工作:

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

所以,你有$或姓名,以及所有在一个与水管工大文件。/james /是正则表达式,请记住,您必须以某种方式处理大写字符。