2012-01-08 4 views
0

Итак, я хочу сделать geoNear с помощью runCommand на mongodb, и я хочу, чтобы результаты сортировались по дате.MongoDB и Ruby: runCommand geoNear и сортировка по дате

Я знаю, как сделать первую часть

db.users.runCommand({'geoNear' :"users",'near' : [-76.483999, 42.402794], 'spherical' : true, 'maxDistance' : 20/6378 })

, но как я могу получить результаты таким образом, что она заказана created_at? Если бы я должен был использовать Монго драгоценный камень, чтобы сделать это, то запрос будет выглядеть

User.database.command({'geoNear'=>"users",'near' => [-122, 37]}, 'spherical' => true, 'maxDistance' => 20/6378)

Тем не менее я не знаю, как сортировать его по дате. В этом случае я рассматривал возможность использования индекса на created_at. У меня есть индексы как по местоположению, так и по created_at, но результаты по-прежнему не возвращаются по порядку даты created_at. Кто-нибудь знает, как это сделать?

ответ

1

Я не думаю, что его можно добавить сортировать по geonear команды, согласно ссылке

Допустимые варианты: «рядом», «номер», «maxDistance», «distanceMultiplier» и «запрос» ,

по умолчанию он отсортирован по расстоянию.

В качестве альтернативы вы можете написать сферический запрос, как это

db.users.find({ loc : { $nearSphere : [80.21223299999997, 13.034892],$maxDistance:20/6378 } }).sort({ created_at : -1 }) //-1 for descending 

ваш рубин mongomapper эквивалент может быть (не уверен, лучше проверить)

Users.where(:loc => {'$nearSphere' => [-122, 37],'$maxDistance'=>20/6378 }).sort(:created_at.desc)