RethinkDB中的eqJoin主键太长了

时间:2017-01-19 20:12:54

标签: join rethinkdb reql

我试图以简单的方式在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"
]

1 个答案:

答案 0 :(得分:1)

r.table('users')('inventory')是一个数组序列,因此r.table('users')('inventory')('name')是一个名称数组,而不是一个名称。

也许使用concatMap会产生预期效果。例如:

r.table('users')
 .concatMap(r.row('inventory').default([]))
 .eqJoin('name', r.table('prices'))