RethinkDB составной первичный ключ - PullRequest
0 голосов
/ 02 мая 2018

Мне было интересно, как бы вы соединили таблицу с составным первичным ключом.

Составной ключ достигается использованием массива в поле первичного ключа

Таблица 1

{id: key1, other: data}

Таблица 2

{id: [key1, key2], other: data}

Итак, я хочу присоединиться к table2.id [0] с table1

r.table("table1").eq_join("id[0]", r.table("table2")).run()

1 Ответ

0 голосов
/ 02 мая 2018

Вы не можете использовать eqJoin здесь, потому что это требует, чтобы ключи были строго равны (строки не являются массивами и наоборот). Это также означает лучшую производительность среди всех операций объединения, поэтому eqJoin предназначен для приема только имени поля, а не выражения. Похоже, вы хотите innerJoin, который может справиться с вашим делом, но пожертвовать некоторой производительностью (на самом деле я не уверен в реальных последствиях для производительности):

r.table('table1')
    .innerJoin(
        r.table('table2'),
        (doc1, doc2) => doc1('id').eq(doc2('id').nth(0))
    )

Обратите внимание, что вы можете использовать выражения, которые пытались использовать в своем вопросе ("id[0]" просто означает имя поля для eqJoin).

...