查看Couch DB Joins中描述的示例。
它讨论了视图整理以及如何为博文发布一个文档,然后每个评论都是CouchDB中的单独文档。例如,我可以将“我的帖子”和5条评论与“我的帖子”相关联,共计6个文档。在他们的示例中,“myslug”存储在post文档和每个注释文档中,这样当我使用键“myslug”搜索CouchDB时,它将返回所有文档。
这是问题/问题。假设我想在评论中搜索作者,还有一个帖子也有“news”的类别。这怎么会正常工作?
例如:
function(doc) {
if (doc.type == "post") {
emit([doc._id, 0], doc);
} else if (doc.type == "comment") {
emit([doc.post, 1], doc);
}
}
这将基于此加载我的博文和评论:?startkey=["myslug"]
但是,我想这样做,抓住作者 bob 的评论,以及具有 news 类别的帖子。对于此示例, bob 已向博客文章写了三条评论,其中包含 news 类别。似乎CouchDB只允许我搜索两个文档中存在的键,而不是搜索一个文档中的键,而另一个键中的键与map函数一起“join”。
换句话说,如果帖子和评论由slug连接,我如何搜索一个文档中的一个字段和另一个由id又加入的文档中的另一个字段。团状?
在SQL中它将是这样的:
SELECT * FROM comments JOIN doc.id ON doc.post WHERE author = bob AND category = news
答案 0 :(得分:0)
我一直在调查couchdb大约一个星期,所以我没有资格回答你的问题,但我想我已经得出结论,它无法完成。查看结果需要绑定到一个且只有一个文档,以便可以更新视图。你将不得不进行非规范化,至少如果你不想进行咕噜声搜索。如果有人想出一个聪明的方法,我真的很想知道。
答案 1 :(得分:0)
有几种方法可以在CouchDB上近似SQL连接。我刚刚在这里问了一个类似的问题:Why is CouchDB's reduce_limit enabled by default? (Is it better to approximate SQL JOINS in MapReduce views or List views?)