CouchDB关系数据的MapReduce查询
CouchDB MapReduce query for relational data
在我开始之前,请不要告诉我使用SQL。在更大的上下文中,这是一个小问题,我不能也不想在这里使用关系数据库。我知道这个问题很容易在SQL中解决。
有三种类型的文档:
- 玩家
- <
- 团队/gh>赞助商
球队属于一个赞助商,但有许多球员。一个球员可以在多个球队,一个赞助商可以有多个球队。
玩家1—N队伍N—1赞助商
我把球员文档id放到了Teams文档的数组中:
players: ["payer1","player2",...]
现在我想要一个特定球员的所有(不同的,只命名一次)赞助商:
Player1: Sponsor1, Sponsor2, Sponsor3,…
这有点像CouchDB Wiki中的n-n示例,但由于团队玩家中有多个键,因此实际上不起作用。
我用示例数据创建了一个要点。
任何想法如何编写MapReduce函数来得到这个结果?
我得到的最接近的,但多次显示赞助商,组级别为1:
function(doc) {
if(doc.type == "team")
emit(doc.players,doc.sponsor);
}
function(keys, values) {
return (values);
}
你已经接近你的视图了,这里稍微修改了一下:
"playerSponsers": {
"map": "function(doc) {
if(doc.type == "team" && doc.players) {
for (i in doc.players) {
emit([doc.players[i], doc.sponsor],1);
}
}
}",
"reduce": "_sum"
}
下面是查询:
http://localhost:5984/test/_design/sports/_view/playerSponsors?group=true&group_level=2
你会得到这样的结果:
{"rows":[
{"key":["Player1","Sponsor1"],"value":1},
{"key":["Player1","Sponsor2"],"value":1},
{"key":["Player1","Sponsor3"],"value":1},
{"key":["Player2","Sponsor1"],"value":1},
{"key":["Player2","Sponsor2"],"value":2},
{"key":["Player2","Sponsor3"],"value":1}
]}
如果你只想获得一个球员的赞助商,你可以这样查询
http://localhost:81/test/_design/sports/_view/playerSponsors?group=true&group_level=2&startkey=[%22Player1%22]&endkey=[%22Player1%22,{}]
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- j查询utc offSets的时差
- 如何有效地将游戏数据存储在URL查询字符串中
- 如何处理node.js节点mongodb中的连接和查询队列
- 如何从 HTML 查询中删除项目
- 从查询字符串参数推断出正确的数据类型
- 将curl查询转换为jQuery.ajax()
- 触发媒体查询断点时刷新页面
- 使用DynamoDB查询返回
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- 如何将PHP get查询转换为Meteor's HTTP.get()
- AngularJS:获取链接中没有哈希的查询字符串值
- 捕获初始RedQueryBuilder查询中的SQL问题
- AngularJS,如何更改查询字符串
- 具有大型几何图形的基于沙发的空间查询
- 在php中提交数据时,如果某些值为null,而某些值为非null,如何进行查询
- MapReduce还是普通查询?(每个贴图有几个发射)
- 如何在MongoDB MapReduce JavaScript查询中引用对象数组中对象的每个属性
- CouchDB关系数据的MapReduce查询
- Mongodb mapReduce:查询其他数据库