rethinkdb eqJoin匹配

时间:2016-01-14 19:28:55

标签: javascript rethinkdb rethinkdb-javascript

您好我正在使用javascript和rethinkdb,我正在尝试弄清楚当目标的id不在维护者身上但在第二张桌子上时如何使用eqJoin。

网站上的例子显示了这一点。

first table /players
[{name: 'anna', gameID:1}]

second table /games
[{id: 1, gameName: 'supergame'}]

但我想加入的是

first table / players
[{id 1, name: 'anna'}]

second table / games
[{playerID: 1, gameName:'supergame'},
 {playerID: 1, gameName:'megagame'},
 {playerID: 1, gameName:'lamegame'}]

我已经阅读了一些有关concatMap的内容并尝试了这一点,但这显然给了我错误,还有其他方法吗?

如果有可能我甚至可以加入更多的桌子?

r.table("players").concatMap(function(play) {
    return r.table("games").getAll(
        play("id"),
        { index:"playerID" }
    ).map(function(games) {
        return { left: play, right: games }
    })
}).run(conn, callback)

2 个答案:

答案 0 :(得分:1)

右边的表格必须包含您所获得的字段的索引。它从您的第二个示例中看起来就像Unescaped '<' not allowed in attributes values 上已有索引playerID;如果是这种情况,那么您应该只能将games指定为index: 'playerId'的参数。类似于eqJoin

如果不存在 ,则可以使用r.table('players').eqJoin('id', r.table('games'), {index: 'playerId'})创建它。

答案 1 :(得分:0)

通过slack.rethinkdb.com的一些帮助我得到了这个答案,效果很好。 这也将匹配的对象放在对象的树中

r.db('test').table("players").map(function(play){ 
    return play.merge({ "games": r.db('test').table("games").getAll(trans("id"), {"index": "playerID"}).coerceTo("ARRAY")}); 
})