我需要使用对象数组中的两个参数来收集MongoDb集合的元素。
我使用collectionX.find
type()仅将那些具有" 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}}
答案 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 } } } );