最近在Mongoid上工作,我很困惑,在Mongoid中embed_one和has_one一样?如果不是,有什么区别和任何例子?
答案 0 :(得分:6)
首先,请阅读mongoid documentation about relations!
Mongoid Embedded 1-1
儿童被嵌入其中的一对一关系 父文档是使用Mongoid的embeds_one和embedded_in定义的 宏。
Mongoid Refrence 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
}
}