我建议您将各个部分(用户、问题、答案、评论、标签、投票)作为单独的文档存储在一个数据库中。
不要将它们存储在单独的数据库中。这样会失去视图的优势,并且需要进行指数级别的HTTP请求来收集数据。
--
请看http://www.cmlenz.net/archives/2007/10/couchdb-joins,这篇文章对我启发很大。感谢Costa在另一个问题中分享了链接。
虽然这篇文章使用了无处不在的博客示例,但我认为“视图聚合”是你想要的方法之一。
作为另一个文档的子文档的文档将通过父文档的“_id”属性进行链接。此外,您将为文档指定一个“类型”属性,以便在视图中返回时对它们进行排序。例如:
function(doc) {
if (doc.type == "post") {
map([doc._id, 0], doc);
} else if (doc.type == "comment") {
map([doc.post, 1], doc);
}
}
您将获得返回的内容如下:
{
"total_rows": 5, "offset": 0, "rows": [{
"id": "myslug",
"key": ["myslug", 0],
"value": {...}
}, {
"id": "ABCDEF",
"key": ["myslug", 1],
"value": {...}
}, {
"id": "DEFABC",
"key": ["myslug", 1],
"value": {...}
}, {
"id": "other_slug",
"key": ["other_slug", 0],
"value": {...}
}, {
"id": "CDEFAB",
"key": ["other_slug", 1],
"value": {...}
}]
}
你现在已经通过一个HTTP请求获取了所有数据,包括父级和子级。此外,你可以直接通过REST API对这些文档进行CRUD操作。在我看来,这正是你想要的。
你可以将相同的方法应用于任何具有一对多或多对一关系的内容。
希望这能帮到你!