从同一个表加入多个ID

时间:2015-03-30 12:36:34

标签: javascript join rethinkdb

我正在尝试在多个ID上加入两个表(versuswords)。我真的不知道如何解释它,所以我只是要表明我的意思。

摘自versus - 表:

{
    "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 - 表:

{
    "id":  "7b88a237-c288-48f1-bf45-2dcd9f812b54" ,
    "word":  "i"
},
{
    "id":  "e87a6252-6d08-4c5a-b057-2718e8c07d93" ,
    "word":  "the"
}

我想加入这两个表,所以得到这样的东西:

{
    "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 - 表格中的大部分内容的结果感到满意(如果有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"])

1 个答案:

答案 0 :(得分:2)

嗯,我做到了......最后!

如果有人感兴趣,这就是我的新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")