1

我正在尝试以一种简单的方式在 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"
]
4

1 回答 1

1

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

也许使用concatMap会给出预期的结果。例如:

r.table('users')
 .concatMap(r.row('inventory').default([]))
 .eqJoin('name', r.table('prices'))
于 2017-01-28T11:57:58.563 回答