0

我真的很喜欢基于文档的方法,将博客文章等数据存储为一个完整的文档,其中保存了所有需要的信息。因此,作者的用户名存储为纯文本。作者本人有自己的文件,并附有个人信息。当作者决定更改他的用户名时会发生什么?我是否必须更新包含该作者博客文章的每个文档,或者这只是使用基于文档的数据库的缺点之一?

感谢您的任何建议!

4

1 回答 1

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})

和作者文档:

{
"_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,....
于 2012-03-09T15:57:24.253 回答