couchdb映射函数和reduce函数



我正在尝试为以下情况计算map函数和reduce函数:

文档:

{
 "_id" : "1_A",
 "key1": 10,
 "key2": 10
}
{
 "_id" : "2_A",
 "key1": 2,
 "key2": 3
}
{
 "_id" : "1_B",
 "key1": 20,
 "key2": 20
}
{
 "_id" : "2_B",
 "key1": 1,
 "key2": 0
}

等等。

期望有:所有id为的文档中每个键(key1、key2…keyn)的总和以"_A"、"_B"结尾。。。分别为"_Z"。

在这种情况下,期望sumA:"key1":12,"key2":13。sumB:"key1":21,"key2":20;

我一直在研究map函数(doc),在我看来,它一次只处理一个指定为"doc"值的文档。

有没有办法达到预期的结果?还有类似SQL联接的吗???

是的,这是可能的!您必须在这里发出一个复合键,如下所示:["A", 1]表示文档中key的值,idA结尾。

地图示例:

function (doc) {
    for (var k in doc) {
        if (k !== '_id' && k !== 'rev') {
            emit([doc._id.substr(doc._id.length - 1), k.substr(k.length - 1)], 
                doc[k]);
        }
    }
}

对于reduce,您希望使用内置函数_sum来提高性能。

然后,您可以使用group=true作为URL参数来查询这些和,通过使用startkeyendkey(例如["A"]["A", {}]),可能会将值限制为仅后缀为A的值。

在这种情况下,结果将是:

{"rows":[
    {"key":["A","1"],"value":12},
    {"key":["A","2"],"value":13},
    {"key":["B","1"],"value":21},
    {"key":["B","2"],"value":20}
]}

相关内容

  • 没有找到相关文章

最新更新