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
Node.js 查询时带有多个运算符的MongoDb Collection.find()_Node.js_Mongodb_Meteor - Fatal编程技术网

Node.js 查询时带有多个运算符的MongoDb Collection.find()

Node.js 查询时带有多个运算符的MongoDb Collection.find(),node.js,mongodb,meteor,Node.js,Mongodb,Meteor,我需要使用对象数组中的两个参数来收集MongoDb集合的元素 我使用collectionX.findtype()只带那些组合了“services.servicesId:[“1”、“3”、“6”]和的“services.value”:true,不带的“services.value”:false 始终返回所有元素,因为所有元素都具有“servicesId” 我尝试了几种方法,包括使用$符号,但没有成功,返回了一个空数组 我正在使用此代码在Meteor客户端上发布: var servicesIds

我需要使用对象数组中的两个参数来收集MongoDb集合的元素

我使用
collectionX.find
type()只带那些组合了“services.servicesId:
[“1”、“3”、“6”]
的“services.value”:true
,不带
的“services.value”:false


始终返回所有元素,因为所有元素都具有“servicesId”

我尝试了几种方法,包括使用$符号,但没有成功,返回了一个空数组

我正在使用此代码在Meteor客户端上发布:

 var servicesIds = ["1", "3", "5"]
    return CollectionX.find (
        {"services.serviceId": {$in: servicesIds}},
        {"services.value": true}
    );
对象具有以下结构:

Id: "ou5HNQGM2KxbBetmy"
createdAt: Mon Apr 06 2015
otherData: Object
personalData: Object
email: test@gmail.com
mobilephone: "11-98654-8785"
name: "UserName"
phone: "11-2625-6364"
services: Array [20]
0: Object {
serviceId: "1",
value: true
} ...

我相信您的第二个搜索参数已应用为投影。请尝试:

  var servicesIds = ["1", "3", "5"]
  return CollectionX.find (
       {"Services.serviceId": {$ in: servicesIds},
        "Services.value": true}  // moved { }
  );

始终返回所有元素,因为所有元素都具有
servicesId

这是因为您正在设置
“Services.value”:true
,远离数组,因此查询将忽略它,请尝试仅通过
将其分隔,而不是像使用
{}
那样将其作为不同的查询参数

试试看


这会得到什么?
CollectionX.find({'services.serviceId':{$in:[servicesIds]}}}});
如果我输入“services.value:false”,我会得到相同的结果,返回带有“services.value:true”的元素“也是。请注意,如果数组
services
中的一个元素匹配,则将返回整个数组中的整个元素。”。您可能正在寻找
$elemMatch
操作员。工作正常!谢谢行代码:services:{$elemMatch:{$serviceId:{$in:servicesIds},value:true}我尝试了以下方法:返回bridereRequests.find({'services.serviceId':{$in:servicesIds},“services.value”:false});并返回所有元素。这是一个标点错误。我修正了,但没有带来我想要的结果,结合了这两个参数。
   var servicesIds = ["1", "3", "5"]
    CollectionX.find( { services: 
         { $elemMatch : { 'Services.serviceId' : servicesIds, "Services.value" : true } } } );