2014-02-16 47 views
0


這是範圍im使用:MongoDB的或運營商範圍

$Range1=array('$or'=>array(
       array('$gte' => floatval($O_NLA), '$lte' => $N_NLA), 
       array('$gte' => floatval($N_SLA), '$lte' => $O_SLA)) 
       ); 
$Range2=array('$or'=>array(
       array('$gte' => floatval($N_SLO), '$lte' => $O_SLO), 
       array('$gte' => floatval($O_NLO), '$lte' => $N_NLO)) 
       ); 

我的查詢的一部分:

$finder=$reposit->findBy(
               array(
               'field1' => $Range1, 
               'field2' => $Range2, 
               'display'=>1 
               ))->toArray(); 

「消息」:「本地主機:27017:無效操作者:$或「.....(雖然很長)

如何使用$或operat或沒有查詢生成器的原則?

回答

1
findBy([ 
    '$or' => [ 
     ['field1' => ['$gte' => floatval($O_NLA), '$lte' => $N_NLA]], 
     ['field1' => ['$gte' => floatval($N_SLA), '$lte' => $O_SLA]], 
     ['field2' => ['$gte' => floatval($N_SLO), '$lte' => $O_SLO]], 
     ['field2' => ['$gte' => floatval($O_NLO), '$lte' => $N_NLO]] 
    ] 
    , 'display' => 1 
]) 

或實際:

findBy([ 
    '$and' => [ 
     ['$or' => [ 
      ['field1' => ['$gte' => floatval($O_NLA), '$lte' => $N_NLA]], 
      ['field1' => ['$gte' => floatval($N_SLA), '$lte' => $O_SLA]], 
     ]], 
     ['$or' => [ 
      ['field2' => ['$gte' => floatval($N_SLO), '$lte' => $O_SLO]], 
      ['field2' => ['$gte' => floatval($O_NLO), '$lte' => $N_NLO]] 
     ]] 
    ] 
    , 'display' => 1 
]) 

要根據你的問題更精確。

由於$or的條件,然後包含find()類似的數組。