CouchDB中的嵌套数据库

时间:2009-11-04 15:46:13

标签: couchdb

您似乎无法在CouchDB中嵌套数据库。人们如何解决这个限制?例如,假设我想创建一个博客引擎,其中每个域都有一个单独的数据库。在每个数据库中,我可能希望用户数据库,订单数据库等包含各种用户文档,订单文档等。

显而易见的方式似乎是一个扁平结构,数据库名称用连字符划分数据库嵌套级别之间的人为边界:

myblog.com-users
myblog.com-posts
myblog.com-comments
anotherblog.com-users
anotherblog.com-posts
anotherblog.com-comments
...hundreds more...

另一种解决方案是保留较低级别的数据库并使用顶级值标记每个文档:

用户包含文档 User1 的数据库,其中包含字段 instance =“Test”或字段 domain =“myblog.com “

2 个答案:

答案 0 :(得分:6)

我认为你在这里滥用了数据库一词。没有理由不能将用户,帖子和评论数据存储在单个couchdb数据库中。您的couchdb视图可以从评论文档中分离出帖子文档中的用户文档。

couchdb数据库中用户文档的示例map函数:

function(doc) {
  if (doc.type = 'user') { // only return user documents
     emit([doc.domain, doc.id], doc); // the returned docs will be sorted by domain
  }
}

请参阅View Api,了解如何使用带有视图排序规则的startkey和endkey按域限制视图结果。

答案 1 :(得分:3)

我认为最好的解决方案是每个域有一个数据库,每个数据库都存储特定于域的数据。