Слишком длинный первичный ключ с eqJoin в RethinkDB

Я пытаюсь использовать соединения в RethinkDB простым способом.

Это запрос, который я пробовал, как показано в документах:

r.table('users')('inventory').default([]).eqJoin('name', r.table('prices')).without({
    right: 'name'
}).zip()

У меня есть список элементов для каждого пользователя следующим образом:

[
    {
        id: "user1",
        inventory: [
            {
                itemid: '1418676',
                name: 'foo'
            },
            {
                itemid: '2849',
                name: 'bar'
            }
        ]
    },
    {
        id: "user2",
        inventory: [
            {
                itemid: '98742',
                name: 'top'
            },
            {
                itemid: '6217',
                name: 'kek'
            }
        ]
    }
]

И таблица цен:

[
    {
        name: 'foo',
        price: 42
    },
    {
        name: 'bar',
        price: 41
    },
    {
        name: 'top',
        price: 40
    },
    {
        name: 'kek',
        price: 69
    }
]

Но по некоторым причинам драйвер выдает ошибку:

e: Primary key too long (max 127 characters): [
    "foo",
    "bar",
    "top",
    "kek",
    "and all the other items name"
]

person Maarethyu    schedule 19.01.2017    source источник


Ответы (1)


r.table('users')('inventory') — это последовательность массивов, поэтому r.table('users')('inventory')('name') — это массив имен, а не одно имя.

Возможно, использование concatMap даст желаемые результаты. Например:

r.table('users')
 .concatMap(r.row('inventory').default([]))
 .eqJoin('name', r.table('prices'))
person AtnNn    schedule 28.01.2017
comment
Это работает отлично, я тоже нашел способ сделать это с помощью concatMap, но ваше решение определенно лучше. - person Maarethyu; 28.01.2017