1

最近在做 Mongoid,我很困惑 Mongoid 中的 embed_one 和 has_one 一样吗?如果不是,有什么区别和任何例子?

4

1 回答 1

7

首先,阅读有关关系的 mongoid 文档

Mongoid 嵌入式 1-1

使用 Mongoid 的 embeds_one 和 embedded_in 宏定义子嵌入在父文档中的一对一关系。

Mongoid 参考 1-1

在父文档中引用子级的一对一关系是使用 Mongoid 的 has_one 和 belongs_to 宏定义的。

mongodb 文档

embeds_one反对的好处has_one

  • 读取操作的性能通常更好。
  • 在单个数据库操作中请求和检索相关数据的能力。

大数据问题:

在文档中嵌入相关数据可能会导致文档在创建后增长。文档增长会影响写入性能并导致数据碎片。此外,MongoDB 中的文档必须小于最大 BSON 文档大小。

使用时会发生这种情况embeds_many

embeds_one将模型嵌入到另一个模型中,但has_one在模型中保存参考。

Mongodb以这种方式将文档保存在数据库中(来自Mongodb示例

参考1-1:

{
   _id: "joe",
   name: "Joe Bookreader"
}

{
   patron_id: "joe",
   street: "123 Fake Street",
   city: "Faketon",
   state: "MA"
   zip: 12345
}

嵌入式 1-1

{
   _id: "joe",
   name: "Joe Bookreader",
   address: {
              street: "123 Fake Street",
              city: "Faketon",
              state: "MA"
              zip: 12345
            }
}
于 2013-08-11T13:28:32.103 回答