MongoDB эквивалент «НЕ МЕЖДУ» - PullRequest
1 голос
/ 28 марта 2011

Я использую MongoDB, драйвер PHP и Google Maps.Так как Google Maps выполняет обход по долготе (в некоторых случаях ЛЕВЫЙ долгота может быть больше ПРАВЫЙ долготы), я пытаюсь получить эквивалент НЕ МЕЖДУ MySQL, работающего в MongoDB.

Кто-нибудь успешно использовал оператор MongoDB "$ or" для имитации НЕ МЕЖДУ?

Вот моя (безуспешная) попытка на данный момент:

// 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 ]

3 голосов
/ 28 марта 2011

PHP-драйвер MongoDB всегда принимает / ожидает массивы ...

Поскольку вы передаете массивы для $ gte и $ lte тоже ... оба должны находиться в массивах для $ или работать правильно.

В вашем примере вы передаете первую часть в массив, но не массив для $ или и еще 2 массива для $ gte и $ lte . ..

Чтобы ваш пример работал, вам нужно сделать что-то вроде ...

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

$cursor = $collection->find($params);
0 голосов
/ 28 марта 2011
NOT BETWEEN (a, b)

в основном переводится как

в $ или предложении с

$lt a
$gt b

Преобразование этого в синтаксис запроса MongoDB JSON просто. Или где твоя проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...