MongoDB и Ruby: runCommand geoNear и сортировка по дате - PullRequest
0 голосов
/ 08 января 2012

Так что я хочу сделать geoNear с использованием runCommand на mongodb, и я хочу, чтобы результаты сортировались по дате.

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

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

, но как мне получить результаты так, чтобы они были упорядочены созданным_посадком?Если бы я использовал для этого монго-гем, запрос выглядел бы так:

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

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

1 Ответ

1 голос
/ 08 января 2012

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

Допустимые значения: "near", "num", "maxDistance",«distanceMultiplier» и «query».

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

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

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

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

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