2011-03-28 61 views
1

我正在使用MongoDB,PHP驅動程序和Google Maps。由於Google Maps對Longitude進行了繞圈(在某些情況下,LEFT經度可能會大於RIGHT經度),因此我試圖獲得相當於MySQL的而不是在MongoDB中的工作。MongoDB等價於「NOT BETWEEN」

有沒有人成功地使用了MongoDB的「$或」操作符來模擬NOT BETWEEN?

這裏是我的(失敗)的嘗試至今:

// If the LEFT longitude is greater 
if ($longitude_left > $longitude_right) { 
    $params = array(
     '$or' => array(
      'longitude' => array('$gte' => $longitude_left, '$lte' => $longitude_right) 
     ) 
    ); 
} 
// By default, the RIGHT longitude is greater 
else { 
    $params = array(
     'longitude' => array(
      '$gte' => $longitude_left, '$lte' => $longitude_right 
     ) 
    ); 
} 

$mongo = new Mongo(); 
$cursor = $mongo->energy->plants->find($params); 

回答

3

MongoDB的PHP驅動程序總是接受/預期陣列...

既然你逝去的$ GTE$ LTE太... 陣列都需要在陣列中的$或才能正常工作。

在你的榜樣,你傳遞的第一部分中的數組,但不是$或$ GTE$ LTE 2個數組的數組...

對於示例工作,你需要做類似...

$params = array('$or' => array(
        array('longitude' => array('$gte' => $longitude_left)), 
        array('longitude' => array('$lte' => $longitude_left)) 
        ) 
      ); 

$cursor = $collection->find($params); 
0
NOT BETWEEN (a, b) 

基本上轉化爲

爲$或子句

$lt a 
$gt b 

轉換成MongoDB的JSON查詢此語法很簡單。或者你的問題在哪裏?