【发布时间】:2011-06-28 02:21:34
【问题描述】:
查看Couch DB Joins中描述的示例。
它讨论了视图排序以及如何为您的博客文章创建一个文档,然后每个评论在 CouchDB 中都是一个单独的文档。例如,我可以将 "My Post" 和 5 个与 "My Post" 关联的 cmets 用于总共 6 个文档。在他们的示例中,"myslug" 存储在帖子文档和每个评论文档中,因此当我使用键 "myslug" 搜索 CouchDB 时,它会返回所有文件。
这是问题/问题。假设我想搜索 cmets 中的作者和一个也有 "news" 类别的帖子。这将如何运作?
例如:
function(doc) {
if (doc.type == "post") {
emit([doc._id, 0], doc);
} else if (doc.type == "comment") {
emit([doc.post, 1], doc);
}
}
这将基于此加载我的博客文章和 cmets:?startkey=["myslug"]
但是,我想这样做,获取作者 bob 的 cmets,以及类别为 news 的帖子。对于此示例,bob 已将三个 cmets 写入博客文章,类别为 news。似乎 CouchDB 只允许我搜索两个文档中都存在的键,而不是搜索一个文档中的键,以及与 map 函数一起 “join” 的另一个文档中的键。
换句话说,如果 post 和 cmets 通过 slug 连接,我如何搜索一个文档中的一个字段和另一个文档中的另一个字段,这些字段由 id aka 连接。蛞蝓?
在 SQL 中应该是这样的:
SELECT * FROM comments JOIN doc.id ON doc.post WHERE author = bob AND category = news
【问题讨论】:
-
这是一个有趣的问题。但是我仍然不清楚你到底需要什么。是否可以解释它在 SQL 中的工作方式?然后我们可以展示 Couch 的方式!
-
没问题...(请原谅我的语法)... Select * from cmets join doc.id on doc.post where author = bob and category = news 。换句话说,我通过 slug/id 将 cmets 表与 posts 表连接起来......然后我从 cmets 中按作者搜索,并按帖子中的类别搜索......这样结果就会给我任何帖子类别新闻,只有作者 bob 的 cmets
-
我完全知道您在寻找什么。我偶然发现了这篇文章jamietalbot.com/2010/03/24/…也许这就是你需要的。
标签: couchdb key join collation