如何使用CouchDB在单个查询中获取带有注释计数的帖子?

如何使用CouchDB在单个查询中获取带有注释计数的帖子?,couchdb,aggregation,Couchdb,Aggregation,如何使用CouchDB在单个查询中获取带有注释计数的帖子 我可以使用map reduce构建独立视图[{key:post\u id,value:comments\u count}],但是我必须点击DB两次-一个查询获取帖子,另一个查询获取评论计数 还有另一种方法(Rails可以做到这一点)——在应用服务器上手动计算评论数,并将其保存在帖子的comment\u count属性中。但是,我们需要在每次添加或删除新评论时更新整个post文档。 在我看来,CouchDB并没有针对这种方式进行调整,不像R

如何使用CouchDB在单个查询中获取带有注释计数的帖子

我可以使用map reduce构建独立视图
[{key:post\u id,value:comments\u count}]
,但是我必须点击DB两次-一个查询获取帖子,另一个查询获取评论计数

还有另一种方法(Rails可以做到这一点)——在应用服务器上手动计算评论数,并将其保存在帖子的
comment\u count
属性中。但是,我们需要在每次添加或删除新评论时更新整个post文档。 在我看来,CouchDB并没有针对这种方式进行调整,不像RDBMS那样,当我们只能更新CouchDB中的
comment\u count
属性时,我们被迫更新整个post文档

也许还有别的办法


谢谢。

视图的返回json将文档计数包含为“总计行”,因此您无需自己计算任何内容,只需发出所有要计数的文档即可

{"total_rows":3,"offset":0,"rows":[
   {"id":...,"key":...,value:doc1},
   {"id":...,"key":...,value:doc2},
   {"id":...,"key":...,value:doc3}]
}

但是我不需要获取所有的评论,这样效率很低。例如,我想显示一个包含大量评论的帖子列表。如果页面上会显示30篇文章,那么使用这种方法,我还必须获取所有30篇文章的所有评论。我想你要么被2个电话困住,要么被更多的带宽困住。如果从浏览器异步抛出两个调用,额外连接的开销会很小,但大部分延迟会重叠。这是不好的,因为在这种情况下,没有javascript的客户端将看不到注释计数