嗨,我在rethinkdb中使用javascript,并且当目标的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)

最佳答案

右边的表格必须在要获取的字段上有一个索引。从第二个示例看来,您在playerID上已经有一个索引games了;如果是这种情况,那么您应该只需指定index: 'playerId'作为eqJoin的参数即可。类似于r.table('players').eqJoin('id', r.table('games'), {index: 'playerId'})

如果该索引不存在,则可以使用indexCreate创建它。

关于javascript - rethinkdb eqJoin匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34798040/

10-11 03:01