我真的很喜欢基于文档的方法,将博客文章等数据存储为一个完整的文档,其中保存了所有需要的信息。因此,作者的用户名存储为纯文本。作者本人有自己的文件,并附有个人信息。当作者决定更改他的用户名时会发生什么?我是否必须更新包含该作者博客文章的每个文档,或者这只是使用基于文档的数据库的缺点之一?
感谢您的任何建议!
我真的很喜欢基于文档的方法,将博客文章等数据存储为一个完整的文档,其中保存了所有需要的信息。因此,作者的用户名存储为纯文本。作者本人有自己的文件,并附有个人信息。当作者决定更改他的用户名时会发生什么?我是否必须更新包含该作者博客文章的每个文档,或者这只是使用基于文档的数据库的缺点之一?
感谢您的任何建议!
如果您需要使用博客文章中的内容和作者姓名编写查询(视图),则该姓名必须包含在博客内容中,因此必须更新所有博客文章。
如果名称仅供参考(我的意思是您不查询博客文章内容,如关键字和作者姓名),您可以将 id 添加到博客文档中(当然现在可以查询博客内容和作者 ID)和发出 {'_id':doc.author_id} 作为值。
include_docs=true
然后为您提供作者的文档(不再是 blogpost-doc .. 您必须使用结果行中的 id 显式调用它)。无需更新博文。
示例: 案例 1: 按姓名使用作者,您必须包含姓名,因此更新所有文档。
{
"_id":"blogpost1",
"author":"Oliver",
"keyword":"couchDB"
}
查找来自 Oliver 的所有 couchdb 帖子:
emit ([doc.author,doc.keyword],1)
称呼:
&key=["Oliver","couchDB"]
案例2: 无需按名称查询
{
"_id":"blogpost1",
"author_id":"author-123",
"keyword":"couchDB"
}
emit (doc.keyword,{'_id':doc.author_id})
和作者文档:
{
"_id":"author-123",
"name":"Oliver"
}
称呼:
?key=["couchDB"]&include_docs=true
结果:
...
{"id":"blogpost1","key":"couchDB","value":{"_id":"author-123"},"doc":{"_id":"author-123","_rev":"xxx","name":"Oliver,....