3

您似乎无法在 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"

4

2 回答 2

6

我认为您在这里误用了术语数据库。没有理由不能将用户、帖子和评论数据存储在单个 couchdb 数据库中。您的 couchdb 视图可以将用户文档与帖子文档、评论文档分开。

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

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

有关使用 startkey 和 endkey 和视图排序规则按域限制视图结果的方法,请参阅View Api 。

于 2009-11-05T02:30:13.510 回答
3

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

于 2012-06-21T15:24:14.780 回答