CouchDB:按键分组数据

时间:2012-08-27 10:06:15

标签: mapreduce couchdb

我的数据库中有以下数据:

|  value1  |  value2  |
|----------+----------|
|     1    |    a     |
|     1    |    b     |
|     2    |    a     |
|     3    |    c     |
|     3    |    d     |
|----------+----------|

我想要的输出是{"key":1,"value":[a,b]},{"key":2,"value":[a]},{"key":3,"value":[c,d]}

我写了这个地图功能(但不确定这是否正确)

function(doc) {
    emit(doc.value1,doc.value2);
}

...但我错过了reduce函数。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

不确定是否可以/应该使用reduce功能。

但是,您可以使用lists重新格式化输出。尝试以下列表功能:

function (head, req) {
    var row,
        returnObj = {};
    while (row = getRow()) {
        if(returnObj[row.key]){
            returnObj[row.key].push(row.value);
        }else{
            returnObj[row.key] = [row.value];
        }
    }
    send(JSON.stringify(returnObj));
};

输出应如下所示:

{
  1: [
    "a",
    "b"
  ],
  2: [
    "a"
  ],
  3: [
    "c",
    "d"
  ]
}

希望有所帮助。