1

我只是couchdb的初学者,所以我可能会误解观点,所以你可以和我一起教和讨论

文档类型 - 用户 - 主题 - 评论

要求 - 我想上网 - 1 请求获取这个复杂的文档

输出我需要 KEY "topic-id" , VALUE { _id : "topic-id", created_at:"2011-05-30 19:50:22", title:"Hello World", user: {_id : "user- 1",type:"user",username:"dominixz",signature:"http://dominixz.com"} 评论:[ {_id:"comment-1", text:"Comment 1",created_at:"2011 -05-30 19:50:22”,用户:{_id:“user-1”,类型:“用户”,用户名:“dominixz”,签名:“http://dominixz.com”}},{_id :"comment-2", text:"Comment 2",created_at:"2011-05-30 19:50:23",user: {_id : "user-2",type:"user",username:"dominixz2 ",signature:"http://dominixz1.com"}}, {_id:"comment-3", text:"Comment 3",created_at:"2011-05-30 19:50:24",用户:{_id:"user-3",类型:"用户",用户名:"dominixz3",签名:"http://dominixz2.com"}},] }

我有这样的“用户”数据 {_id:"user-1",type:"user",username:"dominixz",signature:"http://dominixz.com"} {_id:"user-2",类型:“用户”,用户名:“dominixz2”,签名:“http://dominixz1.com”} {_id:“user-3”,类型:“用户”,用户名:“dominixz3”,签名:“http: //dominixz2.com"}

像这样的“主题”数据 {_id : "topic-id",created_at:"2011-05-30 19:50:22",title:"Hello World",user:"user-1"}

像这样的“评论”数据 {_id:"comment-1",type:"comment" , text:"Comment 1", created_at:"2011-05-30 19:50:22" , user: "user-1" , topic:"topic-id"} {_id:"comment-2",type:"comment" , text:"Comment 2", created_at:"2011-05-30 19:50:23" , user: "user -2" , 主题:"topic-id"} {_id:"comment-3",type:"comment" , 文本:"Comment 3", created_at:"2011-05-30 19:50:24" , 用户:“用户 3”,主题:“主题 ID”}

我如何编写 map、reduce、list 来实现这个复杂的数据?以及当我想在 db 中使用 LIMIT 、 OFFSET 时怎么样

预先感谢

4

2 回答 2

1

在这里很难说出您要查找的内容,但我认为您要求的是本网页中记录的经典 CouchDB 连接。

我建议阅读整个内容,但妙语看起来像这样(根据您的数据翻译):

function (doc) {
    if (doc.type === 'topic') {
        emit([doc._id, 0, doc.created_at], null);
    } else if (doc.type === 'comment') {
        emit([doc._id, 1, doc.created_at], null);
    }
}

该地图将返回主题 ID,然后按时间顺序返回其所有评论。这null可以防止索引变得太大,您可以随时添加include_docs=true请求以在需要时提取完整文档,或者您可以使用索引最佳实践来包括那里有趣的位。

于 2011-08-31T07:04:05.360 回答
0

CouchDB 是文档数据库,而不是关系数据库。因此,它最适合处理包含所有相关数据的文档。虽然您可以像以前一样规范化您的模式关系样式,但我认为这不是 Couch 的最佳用例。

如果我要在 Couch 中设计您的 CMS,我会将主题、内容和评论全部保存在一个文档中。那将直接解决您的问题。

您当然可以自由地使用文档存储来模拟关系数据库,但这不是它们的自然用例,这会导致类似这样的问题。

于 2011-08-18T10:46:17.903 回答