Mongodb 如何在Mongoid中按动态属性排序文档

Mongodb 如何在Mongoid中按动态属性排序文档,mongodb,mongoid,Mongodb,Mongoid,我正在使用Mongoid存储一系列地理编码的列表。这些物品需要按价格和距离排序。每个列表的价格是数据库中的一个字段,而距离是一个动态属性,对于每个用户都是唯一的 class Listing include Mongoid::Document field :price def distance get_distance(current_user.location,coordinates) end end 如何按距离对这些文档进行排序?我尝试了@listing.desc

我正在使用Mongoid存储一系列地理编码的列表。这些物品需要按价格和距离排序。每个列表的价格是数据库中的一个字段,而距离是一个动态属性,对于每个用户都是唯一的

class Listing
  include Mongoid::Document

  field :price

  def distance
    get_distance(current_user.location,coordinates)
  end
end
如何按距离对这些文档进行排序?我尝试了
@listing.desc(:distance)
,但没有成功。

简短(但没有帮助)的答案是:你不能

Mongoid确实有能力,但您可以更新控制器以执行以下操作:

@listings = Listing.near(current_user.location)
我相信它会按距离的顺序返回您的列表

另一方面,我注意到您的
列表
模型指的是您的
当前用户
对象,这有点打破了MVC架构,因为您的模型不应该知道关于当前会话的任何信息