加入来自同一个 table 的多个 ID

Join on multiple ids from the same table

我正在尝试在多个 ID 上加入两个 table(versuswords)。我真的不知道怎么解释,所以我只是想表达我的意思。

摘自 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 是否存在并不重要)和两个对应于 heronemesis 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")