2015-04-07 74 views
0

我需要使用對象數組中的兩個參數來收集MongoDb集合的元素。MongoDb Collection.find()在查詢中有多個操作符

我使用collectionX.find類型(),以使只有具有組合這些元素。「services.servicesId:[" 1 "," 3 "," 6 "]"services.value": true,不"services.value" : false

始終返回的所有元素,因爲所有的元素具有‘servicesId’

我試過多種方法,包括使用$符號,但沒有成功,返回一個空數組。我試着用$and太返回的所有元素。

我使用此代碼發佈在我身上teor客戶:

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: [email protected] 
mobilephone: "11-98654-8785" 
name: "UserName" 
phone: "11-2625-6364" 
services: Array [20] 
0: Object { 
serviceId: "1", 
value: true 
} ... 
+0

你得到了什麼。 ? 'CollectionX.find({'services.serviceId':{$ in:[servicesIds]}});' – Ethaan

回答

0

始終返回的所有元素,因爲所有的元素有servicesId

那是因爲你是從陣列設置"Services.value": true,走,所以查詢忽略它,嘗試給它一個公正的分離,而不是像您使用的{}

嘗試使用$elemMatch不同的查詢參數。

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

不工作。發生錯誤。 – MeteoritoBr

+0

你得到了什麼錯誤? – Ethaan

+0

我試過這個:return BrideRequests.find( {'services.serviceId':{$ in:servicesIds}, 「services.value」:false}); 並返回所有元素。 – MeteoritoBr

0

我相信你的第二個搜索參數作爲投影應用。嘗試:

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

如果我把「services.value:false」我有相同的結果,返回元素與「services.value :真「。 – MeteoritoBr

+0

請注意,如果數組「services」中的某個元素匹配,則整個元素將返回整個數組。您可能正在尋找'$ elemMatch'運算符。 – mishik

+0

工作!謝謝! 行代碼: 服務:{$ elemMatch:{serviceId:{$ in:servicesIds},value:true}} – MeteoritoBr

相關問題