我正在为我正在构建的 Web 应用程序研究 MongoDB。来自 MySQL 背景,嵌入式文档的概念并不是那么容易完全理解。
假设我有一个名为的文档blogpost
,它看起来像这样:
db.posts.save({
_id: 1
title: "first post!",
body: "post content",
author: {
_id: 1,
name: 'John'
email: 'jonh@doe.com'
},
comments: [
{
_id: 20,
author: 'mary',
content: 'This blog post is cool!'
}
]
});
Run Code Online (Sandbox Code Playgroud)
每个作家实际上将被存储在在authors
收集,当我保存blogpost
,我只会从复制数据author
文件,并将其粘贴所以它嵌入在blogpost
文件。这是一个好方法吗?
我担心的是,当约翰更新他的电子邮件地址时,它只会在authors
集合中更新。他的一些较早的博文会显示一个过时的电子邮件地址。
MongoDB 是否有处理该问题的方法,还是我需要在我的应用程序代码中自己做?
如果我在我的应用程序代码中这样做,那么首先将作者嵌入到博客文章中有什么意义?我可以只存储引用 ,author _id
并在单独的查询中查找作者。
另一方面,如果我需要存储历史数据,例如带有客户信息的发票,那么将客户文档嵌入到发票文档中是有意义的,因为发票需要显示创建发票时存在的客户数据.
对于评论部分,我已经阅读了多集合 vs 嵌入式文档,当谈到评论时,多集合似乎是要走的路。http://mongly.com/Multiple-Collections-Versus-Embedded-Documents/
那么,总的来说 - 我是否完全错过了嵌入式文档的重点?