[英]MongoDb Collection.find() with multiple operators on query
我需要使用对象数组中的两个参数来收集MongoDb集合的元素。
我使用collectionX.find
类型()仅带来那些具有“ services.servicesId: [" 1 "," 3 "," 6 "]
与"services.value": true
的组合的元素,而没有"services.value" : false
始终返回所有元素,因为所有元素都有“ servicesId”。
我尝试了几种方法,包括使用$符号,但未成功,返回了一个空数组。 我尝试使用$and
并返回所有元素。
我正在使用以下代码在Meteor Client上发布:
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
,而不是数组,因此查询将忽略它,尝试仅将其分隔为,
而不是像使用{}
那样将其作为其他查询参数
尝试使用$ elemMatch 。
var servicesIds = ["1", "3", "5"]
CollectionX.find( { services:
{ $elemMatch : { 'Services.serviceId' : servicesIds, "Services.value" : true } } } );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.