2013-06-01 2 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}, sold : {$ ne : true}}]} 쉘에서 (똑같은 결과를 얻습니다) 그리고 나서 해당 PHP에서 시도하십시오. –

+0

고맙습니다, 그게 다야! 괜찮으 시다면, 답변으로 쓰시겠습니까? 받아 들일 수 있습니까? – Dan

답변

1

query are interpreted as "and"의 여러 "절"에 $ 및 쿼리가 필요하지 않으므로. 당신이 $and:[ ]을 가지고가는 경우에 당신은 당신을 위해 작동해야 PHP 대응에 있음을 변환 할 때 당신은 간단

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

와 끝까지.