加入来自同一个 table 的多个 ID
Join on multiple ids from the same table
我正在尝试在多个 ID 上加入两个 table(versus
和 words
)。我真的不知道怎么解释,所以我只是想表达我的意思。
摘自 versus
-table:
{
"date": 1427675857789,
"hero": "7b88a237-c288-48f1-bf45-2dcd9f812b54",
"id": "017fe06a-e37d-4f23-92a3-bc52b38de4d7",
"nemesis": "e87a6252-6d08-4c5a-b057-2718e8c07d93",
"points": {
"hero": 58659,
"nemesis": 3021
}
}
摘自 words
-table:
{
"id": "7b88a237-c288-48f1-bf45-2dcd9f812b54" ,
"word": "i"
},
{
"id": "e87a6252-6d08-4c5a-b057-2718e8c07d93" ,
"word": "the"
}
我想加入两个 table,所以得到这样的东西:
{
"date": 1427675857789,
"hero": "i",
"nemesis": "the",
"points": {
"hero": 58659,
"nemesis": 3021
}
}
这是我目前所拥有的:r.table("versus").eqJoin("hero", r.table("words")).zip()
,这让我得到了这个:
{
"date": 1427675857789 ,
"hero": "7b88a237-c288-48f1-bf45-2dcd9f812b54" ,
"id": "7b88a237-c288-48f1-bf45-2dcd9f812b54" ,
"nemesis": "e87a6252-6d08-4c5a-b057-2718e8c07d93" ,
"points": {
"hero": 60507 ,
"nemesis": 3504
} ,
"word": "i"
}
我对如何在 hero
行和 nemesis
行上加入它感到有点困惑。
尽管我对显示 versus
-table 中大部分内容的任何结果都很满意(id
是否存在并不重要)和两个对应于 hero
和 nemesis
id 的两个词。
编辑:我已经想通了,但现在我只能得到第一个文件,这违背了我想要达到的目的做...这是我得到的:r.table("versus").eqJoin("hero", r.table("words")).zip().map(r.row.merge({hero: r.row("word")})).eqJoin("nemesis", r.table("words")).zip().map(r.row.merge({nemesis: r.row("word")})).without(["word", "id"])
嗯,我做到了……终于!
如果有人感兴趣,这就是我的新 ReQL 的样子:
r.table("versus").concatMap(function(v){
return r.table("words").getAll(v("hero"), {index: "id"}).map(function(w){
return r.branch(
v("hero").eq(w("id")),
v.merge({hero: w("word")}),
v
)
})
}).concatMap(function(v){
return r.table("words").getAll(v("nemesis"), {index: "id"}).map(function(w){
return r.branch(
v("nemesis").eq(w("id")),
v.merge({nemesis: w("word")}),
v
)
})
}).without("id")
我正在尝试在多个 ID 上加入两个 table(versus
和 words
)。我真的不知道怎么解释,所以我只是想表达我的意思。
摘自 versus
-table:
{
"date": 1427675857789,
"hero": "7b88a237-c288-48f1-bf45-2dcd9f812b54",
"id": "017fe06a-e37d-4f23-92a3-bc52b38de4d7",
"nemesis": "e87a6252-6d08-4c5a-b057-2718e8c07d93",
"points": {
"hero": 58659,
"nemesis": 3021
}
}
摘自 words
-table:
{
"id": "7b88a237-c288-48f1-bf45-2dcd9f812b54" ,
"word": "i"
},
{
"id": "e87a6252-6d08-4c5a-b057-2718e8c07d93" ,
"word": "the"
}
我想加入两个 table,所以得到这样的东西:
{
"date": 1427675857789,
"hero": "i",
"nemesis": "the",
"points": {
"hero": 58659,
"nemesis": 3021
}
}
这是我目前所拥有的:r.table("versus").eqJoin("hero", r.table("words")).zip()
,这让我得到了这个:
{
"date": 1427675857789 ,
"hero": "7b88a237-c288-48f1-bf45-2dcd9f812b54" ,
"id": "7b88a237-c288-48f1-bf45-2dcd9f812b54" ,
"nemesis": "e87a6252-6d08-4c5a-b057-2718e8c07d93" ,
"points": {
"hero": 60507 ,
"nemesis": 3504
} ,
"word": "i"
}
我对如何在 hero
行和 nemesis
行上加入它感到有点困惑。
尽管我对显示 versus
-table 中大部分内容的任何结果都很满意(id
是否存在并不重要)和两个对应于 hero
和 nemesis
id 的两个词。
编辑:我已经想通了,但现在我只能得到第一个文件,这违背了我想要达到的目的做...这是我得到的:r.table("versus").eqJoin("hero", r.table("words")).zip().map(r.row.merge({hero: r.row("word")})).eqJoin("nemesis", r.table("words")).zip().map(r.row.merge({nemesis: r.row("word")})).without(["word", "id"])
嗯,我做到了……终于!
如果有人感兴趣,这就是我的新 ReQL 的样子:
r.table("versus").concatMap(function(v){
return r.table("words").getAll(v("hero"), {index: "id"}).map(function(w){
return r.branch(
v("hero").eq(w("id")),
v.merge({hero: w("word")}),
v
)
})
}).concatMap(function(v){
return r.table("words").getAll(v("nemesis"), {index: "id"}).map(function(w){
return r.branch(
v("nemesis").eq(w("id")),
v.merge({nemesis: w("word")}),
v
)
})
}).without("id")