我只是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的时候怎么样提前感谢
答案 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,我会将主题,内容和评论全部保存在一个文档中。这将直接解决您的问题。
您当然可以使用文档存储来模拟关系数据库,但这不是它们的自然用例,这会产生类似这样的问题。