Mongoid embed_one和has_one

Bru*_*Lin 1 activerecord mongodb mongoid

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

KiT*_*T O 7

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

Mongoid Embedded 1-1

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

Mongoid Refrence 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
}
Run Code Online (Sandbox Code Playgroud)

嵌入式1-1

{
   _id: "joe",
   name: "Joe Bookreader",
   address: {
              street: "123 Fake Street",
              city: "Faketon",
              state: "MA"
              zip: 12345
            }
}
Run Code Online (Sandbox Code Playgroud)