2013-06-19 75 views
0

我遇到這樣的情況,用戶可以輸入多個限制到返回返回結果。我試圖在貓鼬身上執行一個「查找」功能,我可以執行多個「和」功能。我認爲下面的第一個塊會返回我的結果,但它返回當前在我的數據庫中的所有結果。我的最終目標,我想實現的是從兩個「5B6D8B」與「BA4D2A」的兩個十六進制的值項爲我提供的路徑只有在PERC> = 5。如果我只是通過「{十六進制:‘5B6D8B’,「IMG .perc':{$ gte:5}}「來找回它的結果是正確的。動態貓鼬尋找使用和風格查詢

clrModel.find([{hex: "5B6D8B", 'img.perc': {$gte: 5} }, 
{hex: "BA4D2A", 'img.perc': {$gte: 5} }] ,'img.path', function(error,data){}); 

第二部分是我想,如果可能的話,建立傳遞給動態查找的值。看來我無法將它作爲字符串傳遞,因爲它不起作用。關於如何實現這一點的任何想法?下面的塊是我想要做的,但它不起作用。不確定它是否有助於更好地理解我正在嘗試做什麼。下面顯示的「finalFind」是我將作爲find查詢的第一個參數傳遞的結果。提前致謝!

var hex, perc, finalFind = '{'; 
for(var i = 0; i < numIndicies; i++){ 
    finalFind += '{hex:"' + hexArr[i] + '", {perc: {$gte:' + percArr[i] + '}}}'; 
    //Handle our end character 
    if(i !== numIndicies-1) 
     finalFind += ','; 
    else 
     finalFind += '}'; 
} 

-------編輯下面顯示文件的例子--------

以下項目代表一個文檔條目

{ 
    "__v": 0, 
    "_id": { 
     "$oid": "51c1ac95f502f20969000022" 
    }, 
    "hex": "BA4D2A", 
    "img": [ 
     { 
      "path": "http://example.com/image1.jpg", 
      "perc": 10, 
      "_id": { 
       "$oid": "51c1ac95f502f20969000023" 
      } 
     }, 
     { 
      "path": "http://example.com/image2.jpg", 
      "perc": 20, 
      "_id": { 
       "$oid": "51c1ac95f502f20969000034" 
      } 
     } 
    ] 
} 

回答

1

嘛,你對於同一個屬性(十六進制)不能有AND值,因爲這是不可能的,所以我假設你想要一個AND子句和一個OR子句,如下所示。 AND是您的條件對象的默認值,因此您只需要$or您的十六進制值。

clrModel.find({ 
    'img.perc': {$gte: 5}, 
    $or: [ 
    {hex: "5B6D8B"}, 
    {hex: "BA4D2A"} 
    ] 
}, 'img.path', function(error,data) {.... 

另一個變體應返回相同的結果:

clrModel.find({ 
    'img.perc': {$gte: 5}, 
    hex: {$in: ["5B6D8B", "BA4D2A"]} 
}, 'img.path', function(error,data) {.... 
+0

感謝彼得!這對我來說很愚蠢。我在想,如果我使用了它,它只會返回一個或另一個,而我應該從查詢的角度考慮它。正如你可能已經知道的那樣,這很棒! {$於:[‘5B6D8B’,‘BA4D2A’]}如何,我也許可以像「[」 5B6D8B「‘BA4D2A’]」到一個對象,我可以傳遞給六角進入十六進制轉換任何想法?當我使用JSON.parse時,它給了我一個錯誤,說明有一個額外的字符','。我將解決這個問題,因爲我的主要問題已經解決。再次感謝! – xtr33me

+1

我的猜測是,你正在建設的十六進制值的字符串數組中的一環,你的代碼把一個逗號結尾。不過,我認爲你不必要地從一個字符串數組轉換成一個JSON字符串回到一個字符串數組。直接使用'hex:{$ in:hexArr}'即可。 –

+0

再次感謝彼得! – xtr33me