形成couchdb的视图/简化
我对couchDB和views和reduces的概念相当陌生,我找不到任何东西可以帮助我以我想要的格式获取数据 我的数据-每组都是自己的文档形成couchdb的视图/简化,couchdb,Couchdb,我对couchDB和views和reduces的概念相当陌生,我找不到任何东西可以帮助我以我想要的格式获取数据 我的数据-每组都是自己的文档 { "_id": "2012-10-28", "scores" : [ { "bob": 3, "dole": 5 } ] } { "_id" : "2012-10-29", "scores" : [ {
{
"_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,
...
}
{
"key": ["bob", "2012-10-27"],
"value": {"score": 3}
}
如果我的源数据不能做到这一点,我可以重新组织它,但这将很困难
非常感谢您的帮助。我还想知道任何解释视图和reduce最佳实践的好资源。除非所有日期都已知,并且您可以在reduce函数中硬编码它们,否则我认为使用map/reduce函数做您需要的事情有点困难 如果可以输出如下内容:
"bob" : {
"2012-10-27": 3,
"2012-10-28": 3,
...
},
"dole": {
"2012-10-27": 5,
"2012-10-28": 6,
...
}
{
"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
}
]
}
这样就更容易操纵了
希望这能有所帮助。您的示例中的所有数据都在一个文档中吗?不,它们是单独的文档。我更新了问题,在条目之间添加了物理分隔,以帮助澄清这一点。仍然不知道文档从何处开始或结束,以及视图行从何处开始或结束。有些密钥应该是文档ID吗?还是查看键?第一个代码块是两个文档。第二个代码块是一个示例,说明了我希望从行中的视图中获取的内容。这是我最终想到的,但是它引出了一个问题。我知道我可以用
startkey=[“bob”]&endkey=[“bob”,{}]
来查询这个问题,但是如果我想同时得到bob和dole,有没有一种方法可以在一个查询中做到这一点呢?是的,你可以做startkey=[“bob”]&endkey=[“dole”]
或者startkey=[“AAA”]&endkey=[“zzz”]
。这两者之间的一切都可以做到,对吗?有没有办法只获取这两个键?您可以尝试使用keys=[key1,key2]
,但我不确定*
是否可以在这里使用组合键,例如keys=[[“bob”、“*”]、[“dole”、“*”]
。