MongoDB находит запрос с $ и $ или и $ nearSphere в переполнении стека

После некоторых попыток и веб-исследований я схожу с ума от этого запроса. Я хочу построить запрос для «Клубов» вокруг географической точки (расстояние до 500 метров) в php на MongoDB.
Но когда я запускаю запрос, он игнорирует ограничение расстояния и показывает все клубы в базе данных, НО отсортированные по расстоянию.

Вот мой набор данных (2dsphere index geoLoc):

{"_id":ObjectId("547c649e30afe32c23000048"),"name":"Club Ritzz","category":"Club","category_list":[{"id":"191478144212980","name":"Night Club"}],"location":{"city":"Mannheim"},"geoLoc":{"type":"Point","coordinates":[8.473665839156,49.484065272756]}}
{"_id":ObjectId("547c649f30afe32c2300004a"),"name":"Das Zimmer Mannheim","category":"Club","category_list":[{"id":"191478144212980","name":"Night Club"}],"geoLoc":{"type":"Point","coordinates":[8.4709362941178,49.487260552592]}}
{"_id":ObjectId("547c64ab30afe32c23000063"),"name":"Nationaltheater Mannheim","category":"Arts/entertainment/nightlife","category_list":[{"id":"173883042668223","name":"Theatre"}],"geoLoc":{"type":"Point","coordinates":[8.4776534992592,49.48782606969]}}
{"_id":ObjectId("547c64a130afe32c2300004f"),"name":"SOHO Bar Club Lounge","category":"Club","category_list":[{"id":"191478144212980","name":"Night Club"},{"id":"164049010316507","name":"Gastropub"}],"geoLoc":{"type":"Point","coordinates":[8.4630844501277,49.49385193591]}}
{"_id":ObjectId("547c64a730afe32c2300005a"),"name":"Loft Club","category":"Club","category_list":[{"id":"191478144212980","name":"Night Club"},{"id":"176139629103647","name":"Dance Club"}],"geoLoc":{"type":"Point","coordinates":[8.4296300196465,49.484211928258]}}

И вот мой php-код (обновлен 2 декабря):

$qry = $pub->find(
array( '$and' =>
array(
array( 'geoLoc' =>
array('$nearSphere' =>
array('$geometry' =>
array('type'=>'Point',
'coordinates'=>
array(
floatval($sLon), floatval($sLat)
)
),
'maxDistance' => 500
)
)
),
array( '$or' =>
array(
array( 'name' => new MongoRegex("/.*club/i")),
array( 'name' => new MongoRegex("/.*zimm/i"))
)
),
array('$or' =>
array(
array('category_list.name' => 'Night Club'),
array('category_list.name' => 'Dance Club'),
array('category' => 'Club')
)
)
)
),
array('id' => 1, 'name' => 1, '_id' => 0)
);

Кто-нибудь знает, почему результаты не ограничиваются указанным maxDistance?

0

Решение

Я обнаружил аналогичную проблему в StackOverflow, в которой указано, что для параметра maxDistance нужно использовать радианы.

Увидеть https://dba.stackexchange.com/questions/23869/nearsphere-returns-too-many-data-what-am-i-missing-am-i-wrong-is-it-a-bug-d

Также, вероятно, будет полезно, если вы сначала протестируете запрос в оболочке mongo, не используя API-интерфейсы PHP (просто чтобы посмотреть, работает ли запрос в целом, и добавьте к нему «.explain ()», чтобы увидеть, что обычно происходит внутри БД).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]