1

我在尝试了解 Mongoid 如何进行排序时遇到了一些问题。我有 2 个模型,Gig 和 Venue,它们都通过 belong_to has_many 关系关联。

我试图通过场地对象的属性“名称”对 Gig 中的对象进行排序,但无济于事。

我希望有人能指出我正确的方向。

以下是截断的模型描述。

我的查询也在下面:

# Gig Model
class Gig 
  include Mongoid::Document
  include Mongoid::Paperclip
  include SearchMagic

  belongs_to :owner, :class_name => "User", :inverse_of => :owns
  belongs_to :venue

  has_and_belongs_to_many :attenders, :class_name => "User", :inverse_of => :attending

  has_and_belongs_to_many :artistes

<snip>
end

# Venue Model
class Venue
  include Mongoid::Document
  include Mongoid::Paperclip
  include SearchMagic

  has_many :gigs
  field :foursquare_id, type: String
  embeds_one :address
  embeds_many :user_ratings

  field :facebook, type: String
  field :twitter, type: String
  field :website, type: String
  field :name, type: String
  field :postal, type: String
  field :tel, type: String
  field :venue_type, type: String
  field :description, type: String
  field :rating, type: Float, default: 0.0

<snip>
end


# Console

>> Gig.desc('venue.name').map{|f| f.venue.name}                                            
=> ["*SCAPE", "Velvet Underground", "Blujaz Lounge", "Velvet Underground", "Home Club", "Wh
ite House, Emily Hill", "Zouk", "Zouk", "The Pigeonhole", "Home Club", "Home Club", "Home C
lub"]

# sorting doesn't work
4

1 回答 1

0

你不能加入mongo。如果您需要连接,请使用关系数据库。非关系数据库的一个“特性”是您不能进行连接。

你基本上有两种选择:

  1. 一个 before_save 回调,它将场地名称作为附加字段注入到演出中(例如参见https://github.com/rewritten/timebank/blob/master/lib/mongoid/denormalize.rb

  2. map-reduce 任务,在对任何场地或演出进行任何修改后,会将场地名称作为附加字段更新到演出中。

最后,您需要 Gig 集合中的一个字段来订购它。

于 2012-10-03T08:07:06.623 回答