0

我对 couchDB 以及视图和减少的概念相当陌生,我找不到任何可以帮助我以我想要使用它的格式获取数据的东西。

我的数据 - 每组都是它自己的文档

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

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

我想要一个返回如下内容的视图/减少:

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

如果我的源数据无法做到这一点,我可以重新组织它,但这会很困难。

任何帮助是极大的赞赏。我还想知道解释视图和减少的最佳实践的任何好的资源。

4

1 回答 1

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

请注意,我认为可以优化原始文档的结构。您有一个分数数组,但其中只有 1 个元素,该元素是一个具有多个名称/玩家键的对象)。这可以更改为:

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

这将使操作更容易。

希望这个对你有帮助。

于 2013-07-18T00:57:11.420 回答