我正在编写一个将CouchDB用于其数据库的应用程序。该应用程序具有与常用于说明Couchdb的博客示例相似的特性。有“锚”文件,如帖子,其他文件涉及特定的帖子,如博客上的评论。 (每个“注释”都有一个类似sql外键的字段。它包含“post”的唯一ID)
但是,“评论”文档有各种类型,其中一种类型使博客文章不再与应用程序相关。 (博客“帖子”是医疗记录,我所指的“评论”类型是指示治疗已完成的报告)。
我不知道如何编写一个视图,该视图将发出所有“帖子”的列表,这些帖子没有附加这些处理完成的文件之一(如“评论”)。有人可以帮我吗?
我不能在主“post”文档上有一个“活动”字段,因为有多个移动客户端更新此文档,我希望避免任何修订冲突,如果其中两个客户端要修改锚点在重新进入网络覆盖范围之前的文件。
答案 0 :(得分:0)
如果您在一个数据库中有帖子,而在另一个数据库中有评论,则使用couchdb无法解决此问题,因为您尝试执行“加入” “和在couchdb中没有连接。在这种情况下,您需要在服务器客户端中分别查询两个数据库,并仅显示那些允许注释的帖子。
否则,如果您在一个数据库中拥有所有内容,那么您需要在帖子中嵌入您的评论,然后编写一个只发布有效评论帖子的视图将是微不足道的。
答案 1 :(得分:0)
您可以使用聚合来计算post中的注释,并使用list函数缩小和过滤掉带有列表函数的0个以上的注释,就像在this answer中一样来质疑“CouchDB相当于Sql NOT IN?”。
查看“count_comments”:
map: function(doc) {
if (!doc.type) return;
if (doc.type == "post") emit(doc._id, null);
if (doc.type == "comment" && doc.post) emit(doc.post, null);
}
reduce: _count
列表:
no_comments: function(head, req) {
var row;
while (row = getRow()) {
if (row.value == 1)
send(row.key + "\n");
}
}
查询:
http://127.0.0.1:5984/mydb/_design/post_n_comments/_list/no_comments/count_comments?group_level=1