基于文档的数据库和CouchDB如何处理ID引用?

时间:2012-03-06 22:06:44

标签: reference couchdb document-based

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

感谢您的任何建议!

1 个答案:

答案 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,....