「カテゴリ」テーブルがあり、各カテゴリには「データ」テーブルに関連付けられたデータがあり、「関連付けられた」他のテーブルに関連付けられたデータがあり、関連付けられているすべてのデータを含むカテゴリを削除したいとします。私が現在行っていることは、次のようなものです。
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 をクライアント側に持ってくる必要があるため、大量の「データ」に対しては機能しないことです。ループ内のクライアント側でページングを行うことは回避策のようです。