如何在一个请求中显示这样的CouchDB Complex输出?

时间:2011-08-17 19:02:56

标签: couchdb couchbase

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

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

要求 - 我想要网页 - 1请求获取此复杂文档

  

输出我需要KEY“topic-id”,VALUE {   _id:“topic-id”,created_at:“2011-05-30 19:50:22”,标题:“你好   世界“,用户:{_ id:   “用户1”,类型: “用户”,用户名: “dominixz”,签名: “http://dominixz.com”}   评论:[{_ id:“comment-1”,text:“Comment 1”,created_at:“2011-05-30   19:50:22“,用户:{_ id:   “用户1”,类型: “用户”,用户名: “dominixz”,签名: “http://dominixz.com”}},   {_id:“comment-2”,text:“Comment 2”,created_at:“2011-05-30   19:50:23“,用户:{_ id:   “用户2”,类型: “用户”,用户名: “dominixz2”,签名: “http://dominixz1.com”}},   {_id:“comment-3”,text:“Comment 3”,created_at:“2011-05-30   19:50:24“,用户:{_ id:   “用户3”,类型: “用户”,用户名: “dominixz3”,签名: “http://dominixz2.com”}},   ]}

     

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

     

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

     

“评论”这样的数据{_id:“comment-1”,输入:“comment”,   text:“Comment 1”,created_at:“2011-05-30 19:50:22”,user:“user-1”,   话题:“topic-id”} {_ id:“comment-2”,输入:“comment”,text:“Comment 2”,   created_at:“2011-05-30 19:50:23”,user:“user-2”,主题:“topic-id”}   {_id:“comment-3”,输入:“comment”,text:“Comment 3”,   created_at:“2011-05-30 19:50:24”,user:“user-3”,主题:“topic-id”}

如何编写map,reduce,list来实现这个复杂的数据?以及我想在db

中使用LIMIT,OFFSET的时候怎么样

提前感谢

2 个答案:

答案 0 :(得分:1)

告诉你在这里寻找什么有点困难,但我认为你要求this web page中记载的经典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以在需要时提取完整文档,您可以使用索引最佳做法包括那里有趣的比特。

答案 1 :(得分:0)

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

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

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