Couchdb 是否可以创建一个Couchbase视图,将输出分组而不使用reduce函数?

Couchdb 是否可以创建一个Couchbase视图,将输出分组而不使用reduce函数?,couchdb,couchbase,Couchdb,Couchbase,在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", "re

在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: '...'
    }]}
{“行”:[],“错误”:[
{“from”:“local”,“reason”:“{,

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

使用“identity reduce”“是沙发式地图还原中的常见陷阱。沙发还原系统设计用于还原功能,看起来更像:

function(keys, values) {
   return values.length;
}
identity reduce最终将在非索引数据结构中存储地图行的多个副本


听起来你想要的是唯一的一组键,而不管减少值是多少。在这种情况下,我会使用_countreduce函数,因为它效率高,可以在任何基础数据上运行。

但我可以执行“身份减少”正如我所提到的,它的类似物在SQL中是不存在的。虽然我知道Couchbase试图让我保持在高性能查询领域,但限制似乎是任意的。这不只是返回与视图相同的数据,而没有reduce函数吗?还是您试图将同一个键的所有数据合并为一个值?是的,我不想他查看时没有使用reduce,而是按键分组。map函数生成{attribute:key}对,我希望在属性上将其分组:{attr1:[key1,key2,key3],attr2:[key4,key5]}