Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB嵌套查询_Mongodb_Meteor - Fatal编程技术网

MongoDB嵌套查询

MongoDB嵌套查询,mongodb,meteor,Mongodb,Meteor,大家好,我想做一个嵌套查询,但我不知道怎么做。我想看看搜索结果中是否出现姓或名,然后看看从搜索结果中返回的用户是水管工。我一直在思考如何进行嵌套查询,在该查询中,我可以查看名字是搜索名称的子字符串还是姓氏是搜索名称的子字符串。任何帮助都将不胜感激。我在谷歌上搜索过,但找不到解决这个问题的办法 Meteor.user.find({$and:[{"profile.type": "plumber"}, ? ]}) 我认为您应该为此使用聚合管道。您可以将检查名字或姓氏的$match的输出通过管道传输到

大家好,我想做一个嵌套查询,但我不知道怎么做。我想看看搜索结果中是否出现姓或名,然后看看从搜索结果中返回的用户是水管工。我一直在思考如何进行嵌套查询,在该查询中,我可以查看名字是搜索名称的子字符串还是姓氏是搜索名称的子字符串。任何帮助都将不胜感激。我在谷歌上搜索过,但找不到解决这个问题的办法

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

我认为您应该为此使用聚合管道。您可以将检查名字或姓氏的$match的输出通过管道传输到第二个$match,该结果过滤“管道工”

尝试一下这样的方法:

//搜索参数
var搜索='son';
变量类型=‘水管工’;
//基于忽略大小写的搜索的正则表达式
var re=new RegExp(搜索“i”);
//返回值(类型=‘水管工’)和
//(最后一个包含“子”或第一个包含“子”)
变量选择器={
$or:[{'profile.firstName':re},{'profile.lastName':re}],
“profile.type”:类型
};
//获取用户
var users=Meteor.users.find(选择器).fetch();

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

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

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

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

谢谢大家的帮助,但我是这样做的

  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")}}]}]});
t=Session.get(“plumberSearchQuery”).split(“”);
regexQueryString=“.*”+t[0];
对于(变量i=1;i
你能给我举个例子看看mongodb文档吗。搜索聚合管道和$match。有一件事我想知道,是否有方法检查字符串是否包含字段值??我不确定,但请检查$substr和$regex。在这种情况下,编写伪代码将使问题更加清楚。假设用户输入“son”-您希望它与用户匹配,例如,名字或“Wilson”,或“Robinson”的姓?我对管道工的要求感到困惑——你是只想搜索管道工,还是想先得到一个结果集?@DavidWeldon用户类型是管道工,我必须从他们那里得到那些名字中有儿子的元素。或者我们也可以这样说,我们得到了一个名字里有儿子的用户,比如罗宾逊或威尔逊,然后从这个结果我们得到了水管工