【发布时间】:2013-08-09 18:54:36
【问题描述】:
最近在做 Mongoid,我很困惑 Mongoid 中的 embed_one 和 has_one 一样吗?如果不是,有什么区别和例子?
【问题讨论】:
标签: mongodb activerecord mongoid
最近在做 Mongoid,我很困惑 Mongoid 中的 embed_one 和 has_one 一样吗?如果不是,有什么区别和例子?
【问题讨论】:
标签: mongodb activerecord mongoid
首先,阅读mongoid documentation about relations!
Mongoid 嵌入式 1-1
孩子嵌入的一对一关系 父文档使用 Mongoid 的 embeds_one 和 embedded_in 定义 宏。
Mongoid 参考 1-1
在其中引用子级的一对一关系 父文档使用 Mongoid 的 has_one 和 belongs_to 定义 宏。
embeds_one 对has_one 的好处
- 读取操作的性能通常更好。
- 能够在单个数据库操作中请求和检索相关数据。
大数据问题:
在文档中嵌入相关数据,可能会导致以下情况 文档在创建后增长。文档增长会影响写入 性能并导致数据碎片。此外,文件在 MongoDB 必须小于最大 BSON 文档大小。
使用embeds_many 时会发生这种情况。
embeds_one 将模型嵌入到另一个模型中,但 has_one 将引用保存在模型中。
Mongodb 以这种方式将文档保存在数据库中(来自Mongodb examples)
参考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
}
}
【讨论】: