MongoDB相当于“NOT BETWEEN”

时间:2011-03-28 02:05:58

标签: php mongodb

我正在使用MongoDB,PHP驱动程序和Google Maps。由于谷歌地图为经度做了回绕(在某些情况下LEFT经度可能大于经度),我试图在MongoDB中使用相当于MySQL的 NOT BETWEEN 。 / p>

有没有人成功使用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);

2 个答案:

答案 0 :(得分:3)

MongoDB的PHP驱动程序总是接受/期望数组......

由于您传递 $ gte $ lte 的数组... 两者需要在 $的数组中或正常工作。

在您的示例中,您传递了数组中的第一部分,但没有传递 $或的数组,还有另外两个数组 $ gte $ lte ...

为了让你的例子工作,你需要做一些像......

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

$cursor = $collection->find($params);

答案 1 :(得分:0)

NOT BETWEEN (a, b)

基本上转化为

带有

的$或子句
$lt a
$gt b

将其转换为MongoDB JSON查询语法是直截了当的。或者你的问题在哪里?