gpt4 book ai didi

javascript - 关系数据的 CouchDB MapReduce 查询

转载 作者:行者123 更新时间:2023-11-29 10:22:45 26 4
gpt4 key购买 nike

在我开始之前,请不要告诉我使用 SQL。在更大的上下文中这是一个小问题,我不能也不想在这里使用关系数据库。我知道这个问题在 SQL 中很容易解决。

文档分为三种类型:

  • 球员
  • 团队
  • 赞助商

球队属于一个赞助商,但有很多球员。一个选手可以在多个团队中,一个赞助商可以有多个团队。

选手 1 --- N 队 N --- 1 赞助商

我将播放器文档 ID 放入数组中的 Teams 文档中:

players: ["payer1","player2",...]

现在我想要特定球员的所有(不同的,只命名一次)赞助商:

玩家 1:赞助商 1、赞助商 2、赞助商 3、...

有点像CouchDB Wiki中的n-n例子, 但由于团队成员中有多个键,所以这实际上不起作用。

我创建了一个 gist with example data. .

知道如何编写 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,{}] 

关于javascript - 关系数据的 CouchDB MapReduce 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8243931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com