Как искать "Ближайших пользователей", используя mongoid, rails и google maps - PullRequest
1 голос
/ 16 июня 2011

У меня есть модель Пользователь с данными о широте и долготе, которые хранятся в БД Mongo.

Для получения этих данных я использую javascript api v3 google maps.

Как лучше всего отобразить «Ближайшие пользователи»?

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Несмотря на то, что ответ DhruvPathak правильный, вот эквивалентный код mongoid ruby ​​для выполнения гео-запросов

User.where(:loc => {'$near' => [50,50]})

User.where(:loc => {'$near' => [50,50],'$maxDistance' => 5})
1 голос
/ 16 июня 2011

Храните ваши данные, чтобы они могли иметь геопространственную индексацию. MongoDb имеет встроенную поддержку для этого. Тогда вы можете легко использовать встроенные запросы для расстояние / близость.

Посмотрите на:

http://www.mongodb.org/display/DOCS/Geospatial+Indexing

*Querying

The index can be used for exact matches:

db.places.find( { loc : [50,50] } )

Of course, that is not very interesting. More important is a query to find points near another point, but not necessarily matching exactly:

db.places.find( { loc : { $near : [50,50] } } )

The above query finds the closest points to (50,50) and returns them sorted by distance (there is no need for an additional sort parameter). Use limit() to specify a maximum number of points to return (a default limit of 100 applies if unspecified):

db.places.find( { loc : { $near : [50,50] } } ).limit(20)

You can also use $near with a maximum distance

db.places.find( { loc : { $near : [50,50] , $maxDistance : 5 } } ).limit(20)*
...