在CouchDB View Map函数中使用'limit'参数

时间:2012-04-04 15:59:03

标签: couchdb mapreduce

我知道通过REST API,可以指定'limit'参数(例如?limit = 5),以限制从CouchDB中给定视图返回的结果数。

我的问题是在视图中的地图功能本身内是否有办法做到这一点......?

3 个答案:

答案 0 :(得分:5)

您的具体问题的答案是“不”。

map函数应用于数据库中的每个文档,reduce函数(如果已定义)将应用于每个reduce结果。想想预先计算。

您在URL中提供的查询参数将应用于MapReduce函数构建的B + Tree。例如,如果您说?limit=5,那么树中最左边的五个叶子将用作结果。或者,如果您说?limit=5&descending=true,那么树中最右边的五个叶子将用作结果。

但是,您在Map函数中执行?limit=5尝试完成的操作可能会以不同的方式完成。例如,您的应用程序可以在文档中包含一些内容,使其有条件地包含在结果中。或者强制执行只有五个文档被标记为在索引中,尽管这很麻烦,并且根据您的数据库的大小,成本很高。

干杯。

答案 1 :(得分:0)

如果您的UUID是顺序的(您可以检查您的配置),您可以利用它本身来查看前五个文档。

答案 2 :(得分:0)

map功能不可能。因为map将分别处理每个文档,并且可能同时在任何单独的节点上处理。它根本无法了解其他文件

但我认为你想要的是reduce。在map函数执行所有操作并且所有结果都存在之后,将执行reduce。因此,您可以以任何方式修改map的结果

简单地说,你可以使用reduce对具有相同键的行进行分组,然后你可以修剪每个组只有5个结果(如果我没记错的话,在rereduce中)