【问题标题】:Chaining queries in rethinkdb在 rethinkdb 中链接查询
【发布时间】:2015-08-08 13:50:54
【问题描述】:

假设我有一个“类别”表,每个类别在“数据”表中都有关联数据,并且在其他“关联”表中有关联数据,我想删除一个包含所有关联数据的类别。 我目前正在做的事情是这样的:

getAllDataIdsFromCategory()
        .then(removeAllAssociated)
        .then(handleChanges)
        .then(removeDatas)
        .then(handleChanges)
        .then(removeCategory)
        .then(handleChanges);

有没有办法在数据库端链接这些查询? 我的函数目前看起来像这样:

var getAllDataIdsFromCategory = () => {
        return r
            .table('data')
            .getAll(categoryId, { index: 'categoryId' })
            .pluck('id').map(r.row('id')).run();
    }

var removeAllAssociated = (_dataIds: string[]) => {
        dataIds = _dataIds;
        return r
            .table('associated')
            .getAll(dataIds, { index: 'dataId' })
            .delete()
            .run()
    }

var removeDatas = () => {
        return r
            .table('data')
            .getAll(dataIds)
            .delete()
            .run()
    }

请注意,我不能使用 r.expr() 或 r.do(),因为我想根据前一个查询的结果进行查询。 我的方法的问题是它不适用于大量“数据”,因为我必须将所有 id 带到客户端,并且在客户端循环为它进行分页似乎是一种解决方法。

【问题讨论】:

    标签: rethinkdb rethinkdb-javascript


    【解决方案1】:

    您可以为此使用forEach

    r.table('data').getAll(categoryID, {index: 'categoryId'})('id').forEach(function(id) {
      return r.table('associated').getAll(id, {index: 'dataId'}).delete().merge(
        r.table('data').get(id).delete())
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多