2013-06-01 20 views
1

我需要根據某些布爾字段的值執行查詢。這些字段在某些文檔中可能不存在,因爲它們是在稍後階段添加的。在mongo中使用布爾查詢問題php

我測試的查詢在外殼和確定工作:

db.product.find({$or: [{approved:true},{$and: [{approved:{$exists:false}}, {sold:{$ne:true}}]}]}) 

但是,試圖做的PHP驅動程序,同樣不似乎工作:

$condA = array('approved' => true); 
$condB = array('approved' => array('$exists' => false), 'sold' => array('$ne' => true)); 

$query = array('pid' => $prodId, '$or' => array($condA, array('$and' => $condB))); 

我測試了一些變種但我總是在日誌中得到這個錯誤:

assertion 13086 $and/$or/$nor must be a nonempty array 

任何暗示我可能做錯了什麼?提前致謝。

+1

你不需要$,完全可以取出$和:[]並使用{$或:{{approved:true},{approved:{$ exists:false},出售:{$ ne: true}}]}(你會得到同樣的結果),然後在相應的PHP中嘗試。 –

+0

謝謝,就是這樣!如果你不介意,你想寫這個作爲答案,所以我可以接受它嗎? – Dan

回答

1

由於query are interpreted as "and"的多個「子句」不需要$和在您的查詢中。如果你把你$and:[ ]最終有一個簡單的

{ $or : [ { approved : true }, { approved : {$exists:false}, sold : {$ne:true} } ] } 

當轉換成相應的PHP應該爲你工作。