Node.js 查询时带有多个运算符的MongoDb Collection.find()
我需要使用对象数组中的两个参数来收集MongoDb集合的元素 我使用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
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 } } } );