我理解这不是编程问题,我无法找到一个非常清晰和描述性的解决方案。
答案 0 :(得分:14)
Mongoid的documentation非常明确:
嵌入式关系描述存储在数据库中其他文档中的文档。
引用关系通过存储关于其他文档的外键数据(通常是id)来描述引用另一个集合中文档的文档。
详细说明:
has_many
在定义这种性质的关系时,每个文档都存储在其各自的集合中,但子文档包含对父项的“外键”引用。
# The parent band document.
{ "_id" : ObjectId("4d3ed089fb60ab534684b7e9") }
# The child member document.
{
"_id" : ObjectId("4d3ed089fb60ab534684b7f1"),
"band_id" : ObjectId("4d3ed089fb60ab534684b7e9")
}
has_and_belongs_to_many
在定义这种性质的关系时,每个文档都存储在各自的集合中,每个文档都以数组的形式包含对另一个文档的“外键”引用。
# The band document.
{
"_id" : ObjectId("4d3ed089fb60ab534684b7e9"),
"tag_ids" : [ ObjectId("4d3ed089fb60ab534684b7f2") ]
}
# The tag document.
{
"_id" : ObjectId("4d3ed089fb60ab534684b7f2"),
"band_ids" : [ ObjectId("4d3ed089fb60ab534684b7e9") ]
}
embeds_many
使用embeds_many
宏嵌入的文档存储为父数据库集合中父级内的哈希数组。
{
"_id" : ObjectId("4d3ed089fb60ab534684b7e9"),
"albums" : [
{
"_id" : ObjectId("4d3ed089fb60ab534684b7e0"),
"name" : "Violator",
}
]
}
答案 1 :(得分:0)
belongs_to:
belongs_to关联与另一个模型建立一对一连接,使得声明模型的每个实例“属于”另一个模型的一个实例。 的has_many
的has_many:
has_many关联表示与另一个模型的一对多连接。您经常会在belongs_to关联的“另一侧”找到此关联。此关联表示模型的每个实例都具有零个或多个另一个模型的实例。
embeds_many:
在mongoid
中用于mongodb
与has_many相同
答案 2 :(得分:0)
Embeds_many将链接到您的对象多次作为嵌入对象的集合(1:N) Has_many将执行相同操作,但不能作为嵌入对象(1:N)
最后一个将大部分相当于(N:N)