【问题标题】:How to access dynamic attribute 'geo_near_distance' with Mongoid如何使用 Mongoid 访问动态属性“geo_near_distance”
【发布时间】:2014-09-08 22:13:10
【问题描述】:

我正在使用带有 Rails 4 的 Mongoid 3.1.6。我需要找到“靠近”某个坐标的所有对象。对于搜索的每个结果,我需要显示与搜索坐标的距离。根据 Mongoid Documentation

...来自 $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)

还是没有结果。 提前感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails mongodb ruby-on-rails-4 mongoid mongoid3


    【解决方案1】:

    您是否在迭代文档时访问该字段?您可以通过规范看到,当文档在内存中并且是标准结果迭代的一部分时,该字段实际上就在那里。

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

    【讨论】:

      【解决方案2】:

      2 年多后,mongodb jira tracker 上的 issue 票仍然打开。

      快速解决方法是不使用哈希表示法而不是点表示法来访问属性:

      代替

      Object.geo_near_distance
      

      使用

      Object['geo_near_distance']
      

      在 mongoid 6 上测试

      【讨论】:

      • 我一直在寻找这个
      猜你喜欢
      • 1970-01-01
      • 2021-09-23
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多