【问题标题】:CouchDB: Group data by keyCouchDB:按键分组数据
【发布时间】:2012-08-27 10:06:15
【问题描述】:

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

|  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);
}

...但我缺少减少功能。感谢您的帮助!

【问题讨论】:

  • 您的数据库中的文档结构究竟如何?
  • 一个文档看起来像这样:{ "_id": "239511c8efc7f28b1a78b0831ea6f2f5", "_rev": "1-f355c3d5c3aaea78e4de4094209ba544", "pedid": 0, "groupid": 0 }我想按groupid分组

标签: mapreduce couchdb


【解决方案1】:

不确定这是否可以/应该使用 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"
  ]
}

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2019-03-27
    • 2012-07-07
    相关资源
    最近更新 更多