【问题标题】:Merge an Array of Documents in RethinkDB在 RethinkDB 中合并文档数组
【发布时间】:2015-08-22 05:33:37
【问题描述】:

假设我有一个名为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: [ ]
}

【问题讨论】:

    标签: join merge rethinkdb reql


    【解决方案1】:

    事实证明,我需要使用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"
    }
    

    【讨论】:

    • 数据库资源管理器中的快速问答reql和用JS驱动写的reql一样吗?
    • 如果您使用的是本地 RethinkDB JS 驱动程序,查询应该是相同的。我不记得有任何可移植性问题。
    猜你喜欢
    • 1970-01-01
    • 2016-08-23
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2015-01-10
    • 2017-07-06
    相关资源
    最近更新 更多