1

我正在编写一个使用 CouchDB 作为其数据库的应用程序。该应用程序与经常用于说明 Couchdb 的博客示例具有相似的品质。有“锚”文档,例如帖子,其中包含引用特定帖子的其他文档,例如博客上的评论。(每个“评论”都有一个字段,就像一个 sql 外键。它包含“帖子”的唯一 ID)

但是,“评论”文档有多种类型,其中一种类型会使博客文章不再与应用程序相关。(博客“post”是医疗记录,我指的“comment”类型是表示治疗结束的报告)。

我一直在努力研究如何编写一个视图,该视图将发出所有“帖子”的列表,这些“帖子”没有附加这些处理完成的文档(如“评论”)。有人可以帮我吗?

我不能只在主“发布”文档上有一个“活动”字段,因为有多个移动客户端更新此文档,如果两个客户端在来之前修改锚文档,我希望避免任何修订冲突回到网络覆盖范围。

4

2 回答 2

0

如果您在一个数据库中有帖子,而在另一个数据库中有评论,那么 couchdb 无法解决此问题,因为您将尝试执行“加入”并且couchdb 中没有加入。在这种情况下,您需要在服务器客户端中分别查询两个数据库并仅显示那些带有允许评论的帖子。

否则,如果您在一个数据库中拥有所有内容,那么您需要将您的评论嵌入到您的帖子中,然后编写一个仅发出具有有效评论的帖子的视图将是微不足道的。

于 2013-01-21T18:44:28.360 回答
0

您可以使用聚合来计算带有 map 的帖子中的评论,并减少并过滤掉带有列表功能的超过 0 条评论的帖子,就像对问题“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
于 2013-01-21T23:56:13.447 回答