0

こんにちは、rethinkdb で JavaScript を使用しています。ターゲットの ID がメインテーブルではなく 2 番目のテーブルにある場合に 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)
4

2 に答える 2

1

右側のテーブルには、取得するフィールドにインデックスが必要です。2 番目の例から、既にインデックスplayerIDを作成しているように見えます。gamesその場合は、 へindex: 'playerId'の引数として指定するだけでよいはずeqJoinです。のようなものr.table('players').eqJoin('id', r.table('games'), {index: 'playerId'})

そのインデックスが存在しない場合は、 を使用indexCreateして作成できます。

于 2016-01-14T19:46:30.840 に答える
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")}); 
})
于 2016-01-14T21:03:18.840 に答える