合并RethinkDB中的文档数组

时间:2015-06-07 19:17:20

标签: join merge rethinkdb reql

我们假设我有一张名为bookshelf的表格。我创建了一个书架文档,其中包含一组ID,这些ID引用另一个名为books的表中的书籍。我正在尝试使用getAllmerge来合并查询中的文档,但我似乎无法将所有元素传递到getAll。我相信getAll会将ID数组解释为单个文字"对象"。

书架文件:

{
    id: 'MyShelf'
    books: [ 1, 2, 6, 9 ]
}

书籍文件:

{
    id: 1
    name: 'Merging in RethinkDB for Dummies'
}

我的查询:

r.db('test').table('bookshelf').merge(function(bookshelf) {
    return {
        booksOnShelf: r.table('books').getAll(bookshelf('books')).coerceTo('array')
    }
})

预期结果:

{
    id: 'MyShelf'
    books: [ 1, 2, 6, 9 ],
    booksOnShelf: [
        { id: 1, name: 'Merging in RethinkDB for Dummies' },
        { id: 2, name: 'Cool Title!' },
        ...
    ]
}

实际结果:

{
    id: 'MyShelf'
    books: [ 1, 2, 6, 9 ],
    booksOnShelf: [ ]
}

1 个答案:

答案 0 :(得分:6)

事实证明,我需要使用r.args将数组转换为实际参数,以便与getAll函数一起使用。

这是正确的查询:

r.db('test').table('bookshelf').merge(function(bookshelf) {
    return {
        booksOnShelf: r.table('books').getAll(r.args(bookshelf('books'))).coerceTo('array')
    }
})

结果:

{
    "books": [ 1, 2 ],
    "booksOnShelf": [{
        "id": 1,
        "title": "RethinkDB for Dummies"
    }, {
        "id": 2,
        "title": "Awesome Title!"
    }],
    "id": "MyShelf"
}