为couchdb形成一个view / reduce

时间:2013-07-17 20:08:56

标签: couchdb

我对couchDB和视图的概念相当新,并且减少了,我找不到任何可以帮助我以我希望使用的格式获取数据的内容。

我的数据 - 每一套都是它自己的文件

{
    "_id": "2012-10-28",
    "scores" : [
        {
             "bob": 3,
             "dole": 5
        }
    ]
}

{
    "_id" : "2012-10-29",
    "scores" : [
        {
             "bob": 3,
             "dole": 6
        }
    ]
}

我希望view / reduce返回类似的内容:

"bob" : {
    "2012-10-27": 3,
    "2012-10-28": 3,
    ...
},
"dole": {
    "2012-10-27": 5,
    "2012-10-28": 6,
    ...
}

如果我的源数据无法做到这一点,我可以对其进行重组,但这很难。

非常感谢任何帮助。我还想知道有哪些好的资源可以解释观点的最佳实践并减少。

1 个答案:

答案 0 :(得分:0)

除非所有日期都已知,并且你可以在reduce函数中对它们进行硬编码,我认为用map / reduce函数做你需要的东西有点困难。

如果可以输出如下内容:

{
  "key": ["bob", "2012-10-27"],
  "value": {"score": 3}
}

然后这个map函数应该有效:

var scoresMapFn = function (doc) {
  var scores = doc.scores[0];
  for (var k in scores) {
    emit([k, doc._id], scores[k]);
  }
};

请注意,我认为可以优化原始文档的结构。你有一个分数数组,但它只有一个元素,它是一个对象,它有几个名字/玩家的键。这可以改为:

{
    "_id": "2012-10-28",
    "scores": [
      {
        "name": "bob,
        "score": 3
      },
      {
        "name": "dole,
        "score": 5
      }
    ]
}

这将使操作更容易。

希望这有点帮助。