MongoDb Collection.find()在查询时有多个运算符

时间:2015-04-07 04:05:05

标签: node.js mongodb meteor

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

我使用collectionX.find type()仅将那些具有&#34; services.servicesId:[" 1 "," 3 "," 6 "]"services.value": true组合的元素带到"services.value" : false,而不使用$and < / p>

始终返回所有元素,因为所有元素都包含&#34; servicesId&#34; 。

我尝试了几种方法,包括使用$ sign,但没有成功,返回一个空数组。我尝试使用 var servicesIds = ["1", "3", "5"] return CollectionX.find ( {"services.serviceId": {$in: servicesIds}}, {"services.value": true} ); 并返回所有元素。

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

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
} ...

该对象具有以下结构:

{{1}}

2 个答案:

答案 0 :(得分:0)

我相信您的第二个搜索参数将用作投影。尝试:

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

答案 1 :(得分:0)

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

那是因为你设置"Services.value": true,远离数组,因此查询忽略它,尝试将其分开,而不是像你使用的那样将其分开{}

尝试使用$elemMatch

   var servicesIds = ["1", "3", "5"]
    CollectionX.find( { services: 
         { $elemMatch : { 'Services.serviceId' : servicesIds, "Services.value" : true } } } );