我正在使用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);
答案 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查询语法是直截了当的。或者你的问题在哪里?