2

我正在尝试为以下情况制定地图功能和减少功能:

文件:

{
 "_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;

我一直在研究地图功能(doc),在我看来,它只是处理一次指定为“doc”值的一个文档。

反正有没有达到预期的结果?反正有没有像 SQL 连接???

4

1 回答 1

1

是的,这是可能的!您必须在此处发出一个复合键,如下所示:对于以结尾的文档中["A", 1]的值。keyidA

地图示例:

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来提高性能。

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

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

{"rows":[
    {"key":["A","1"],"value":12},
    {"key":["A","2"],"value":13},
    {"key":["B","1"],"value":21},
    {"key":["B","2"],"value":20}
]}
于 2013-07-27T17:23:36.230 回答