Как получить доступ к динамическому атрибуту geo_near_distance с помощью Mongoid

Я использую Mongoid 3.1.6 с Rails 4. Мне нужно найти все объекты «рядом» с определенной координатой. Для каждого результата поиска мне нужно будет отображать расстояние от координаты поиска. Согласно документации Mongoid

... каждый созданный документ из запроса $geoNear получит специальный динамический атрибут geo_near_distance, который будет доступен, пока документ находится в памяти.

Но я не могу получить доступ к Object.geo_near_distance

Мой запрос внутри контроллера...

@objects = Object.geo_near([-118.4451, 34.0633]).max_distance(10)

Редактировать №1

Некоторые дополнительные детали

Если использовать следующий запрос в MongoDB

db.runCommand( { geoNear: "objects",
             near: [ -73.95269,40.77578],
             spherical: true
           })

Я вижу массив из 100 элементов. Каждый элемент имеет 2 атрибута. Первый, «dis», имеет такие значения, как «0,000123» (Примечание: это не в км или милях), а второй атрибут — это сам объект результата.

Теперь я изменил запрос на Mongoid на...

@objects = Object.geo_near([-118.4451, 34.0633]).spherical.max_distance(10)

до сих пор нет результата. Заранее спасибо за вашу помощь.


person Som Poddar    schedule 17.07.2014    source источник


Ответы (2)


Спустя более 2 лет тикет о выпуске все еще открыт на трекере mongodb jira.

Быстрое исправление заключается в том, чтобы не использовать хеш-нотацию вместо точечной нотации для доступа к атрибуту:

Вместо

Object.geo_near_distance

Использовать

Object['geo_near_distance']

Проверено на монгоид 6

person Wa0x6e    schedule 21.10.2016
comment
Я искал все это - person Dex; 15.06.2017

Вы получаете доступ к полю во время повторения документов? Вы можете видеть по спецификациям, что это поле на самом деле существует, когда документ находится в памяти и является частью итерации результата критерия.

https://github.com/mongoid/mongoid/blob/master/spec/mongoid/contextual/geo_near_spec.rb#L167

person modetojoy    schedule 29.07.2014