Ron*_*onZ 2 rethinkdb rethinkdb-javascript
假设我有一个"类别"表,每个类别在"数据"表中都有关联的数据,并且它在"关联"的其他表中有相关数据,我想删除一个包含所有相关数据的类别.我目前正在做的是这样的:
getAllDataIdsFromCategory()
.then(removeAllAssociated)
.then(handleChanges)
.then(removeDatas)
.then(handleChanges)
.then(removeCategory)
.then(handleChanges);
Run Code Online (Sandbox Code Playgroud)
有没有办法在db端链接这些查询?我的功能目前看起来像这样:
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()
}
Run Code Online (Sandbox Code Playgroud)
请注意,我不能使用r.expr()或r.do(),因为我想根据前一个查询的结果进行查询.我的方法的问题是它不适用于大量的"数据",因为我必须将所有的id带到客户端,并且在循环中在客户端进行分页似乎是一种解决方法.
你可以使用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())
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
291 次 |
| 最近记录: |