是否可以创建一个Couchbase视图,在不使用reduce函数的情况下对输出进行分组



在Couchbase或CouchDB中,是否可以在没有显式减少函数的情况下进行分组?在我的客户端代码中,我希望将数据提供给我,就像reduce接收数据一样(假设所有映射器都用作输入,即使在reduce期间也是如此)。在没有定义reduce函数的情况下使用group=true会出现错误:

$ curl http://127.0.0.1:8092/default/_design/testing1/_view/all?group=true
{"error":"query_parse_error",
 "reason":"Invalid URL parameter 'group' or 'group_level' for non-reduce view."}

我可以添加身份减少功能:

reduce(keys,data) {return data;}

但Couchbase抱怨我实际上并没有减少任何东西:

{"rows":[], "errors":[
    {"from":"local","reason":"{<<"reduce_overflow_error">>,
        <<"Reduce output must shrink more rapidly: Current output: '...'
    }]}

我当然想让我的客户完全降价。

这不是技术限制,而是逻辑限制。如果不减少某些结果,就无法对结果进行逻辑分组。这类似于SQL中的GROUP BY,除非在SQL查询中也有某种聚合函数,否则不能使用它。

在Couch风格的map reduce中,使用"identity reduce"是一个常见的陷阱。沙发减压系统设计用于减压功能,看起来更像:

function(keys, values) {
   return values.length;
}

identityreduce最终将在非索引数据结构中存储映射行的多个副本。

听起来你想要的是一组独特的关键点,而不考虑减少值。在这种情况下,我将使用_count reduce函数,因为它是高效的,并且可以在任何底层数据上运行。

最新更新