9

我知道这不是编程问题,我无法找到一个非常清晰和描述性的解决方案。

4

3 回答 3

14

Mongoid 的文档很清楚:

嵌入式关系描述了存储在数据库中其他文档中的文档。

引用关系通过存储关于另一个文档本身的外键数据(通常是一个 id)来描述引用另一个集合中的文档的文档。

详细地:

参考 1-n /has_many

在定义这种性质的关系时,每个文档都存储在其各自的集合中,但子文档包含对父文档的“外键”引用。

# The parent band document.
{ "_id" : ObjectId("4d3ed089fb60ab534684b7e9") }

# The child member document.
{
  "_id" : ObjectId("4d3ed089fb60ab534684b7f1"),
  "band_id" : ObjectId("4d3ed089fb60ab534684b7e9")
}

参考nn /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") ]
}

嵌入式 1-n /embeds_many

使用embeds_many宏嵌入的文档作为哈希数组存储在父级数据库集合中的父级内。

{
  "_id" : ObjectId("4d3ed089fb60ab534684b7e9"),
  "albums" : [
    {
      "_id" : ObjectId("4d3ed089fb60ab534684b7e0"),
      "name" : "Violator",
    }
  ]
}
于 2013-08-28T12:49:27.640 回答
0

属于:

belongs_to 关联建立与另一个模型的一对一连接,这样声明模型的每个实例“属于”另一个模型的一个实例。有很多

有很多:

has_many 关联表示与另一个模型的一对多连接。您经常会在 belongs_to 关联的“另一边”找到此关联。这种关联表明模型的每个实例都有另一个模型的零个或多个实例。

embeds_many:

用于mongoidmongodbhas_many 相同

于 2013-08-28T12:49:15.640 回答
0

Embeds_many 将多次链接到您的对象作为嵌入对象 (1:N) Has_many 将执行相同的操作,但不作为嵌入对象 (1:N)

最后一个将主要相当于 (N:N)

于 2013-08-28T12:51:03.197 回答