在Mongoid中按查询排序无法订购

时间:2012-01-03 23:58:33

标签: ruby mongodb mongoid

尝试创建一个很好的有序列表,我有参与者类中我知道的工作方法

def countries_ive_drunk
    had_drinks.map {|drink| drink.beer.country }
  end

  def countries_ive_drunk_count
    countries_ive_drunk.count
  end

知道以上这些工作。我创建了一个新类,希望获得参与者列表并通过countries_ive_drunk_count

订购
class Drinkers
  include Mongoid::Document

  def self.top_ten_drinkers
    Participant.order_by([[:countries_ive_drunk_count, :asc]]).limit(10)
  end
end

但是当这传递给我的haml文件时:

get '/' do
  @topdrinkers = Drinkers.top_ten_drinkers

  haml :index
end

然后没有正确排序。以下代码会生成名称旁边带有计数的名称。计数不是asc或desc,只是以随机顺序(可能是用户输入mongodb的顺序

  %ul        
    - @topdrinkers.all.each do |participant|
      %li
        = "#{participant.countries_ive_drunk_count} - #{participant.name}"

我是否遗漏了任何明显的东西(我第一次使用红宝石,mongodb,mongoid,haml ......让自己陷入深渊!)

1 个答案:

答案 0 :(得分:1)

当您在Mongoid中使用order_bydescasc时,它会将其传递给MongoDB以在数据库服务器上进行排序,并且它正在寻找名为countries_ive_drunk_count的字段,这是不存在的。您需要将数据存储在MongoDB中,以便能够对所有内容进行排序。

您没有列出很多架构,但是您应该考虑使用群组查询来确定最佳饮酒者。