我非常喜欢基于文档的方法,将博客文章等数据存储为整个文档,并在其中保存所需的所有信息。因此,作者的用户名存储为纯文本。作者本人有自己的文件,附有个人信息。当作者决定更改用户名时会发生什么?我是否必须更新该作者包含博客文章的每个文档,或者这只是使用基于文档的数据库的缺点之一?
感谢您的任何建议!
答案 0 :(得分:1)
如果您需要使用博客帖子中的内容和作者姓名编写查询(视图),则该名称必须包含在博客内容中,因此所有博客帖子都必须更新。
如果名称仅用于信息(我的意思是你不查询博客帖子 - 内容,如关键词和作者姓名),你可以将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})
和作者doc:
{
"_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,....