快速示例,
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
进行数据建模吗?
答案 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