rails mongoid找到有孩子的父母

时间:2015-05-13 07:24:36

标签: ruby-on-rails mongoid

快速示例,

class Band
  include Mongoid::Document
  embeds_many :albums
end

class Album
  include Mongoid::Document
  field :name, type: String
  embedded_in :band
end

,文档将如下所示,

{
  "_id" : ObjectId("4d3ed089fb60ab534684b7e9"),
  "albums" : [
    {
      "_id" : ObjectId("4d3ed089fb60ab534684b7e0"),
      "name" : "Violator",
    }
  ]
}

让我们说,我想创建一种方法来查找Band with albums name

如果这是ActiveRecord,则很简单

Album.find_by(name: "Violator").band

但是这种情况呢?

我必须迭代整个集合并找到它吗?

Band.select {|band| band.albums.select{|album| album.name == "Violator"}}

听起来很疯狂......

或者我必须使用Referenced relations而不是Embedded relations进行数据建模吗?

1 个答案:

答案 0 :(得分:1)

嵌入式文档最适合不需要独立查询的项目。如果您需要独立查询的内容,请考虑使用引用。在您的情况下,您可以通过使用特定的专辑名称来更好地找到乐队,然后处理这些乐队

@bands = Band.where("albums.name" => "Violator")
@albums = @bands.collect{|band| band.albums.where(name: 'Violator') }.flatten 

以下是关于mongoid关系的更多细节http://mongoid.org/en/mongoid/docs/relations.html