删除数据
RxDB 支持单条删除和批量删除,均通过 Repository 层与适配器交互。
实体方法删除
最简单的方式是直接调用实体上的 remove() 方法:
const todo = await firstValueFrom(Todo.findOne({ where: { id: 1 } }));
await todo.remove();
remove() 是 EntityManager 在初始化实体时注入到原型上的便捷方法。
使用 Repository 删除
通过 Repository 的 remove() 方法删除:
const todo = await firstValueFrom(Todo.findOne({ where: { id: 1 } }));
await Todo.remove(todo);
Repository.remove() 内部会调用适配器的删除接口,将数据从本地数据库中移除。
批量删除
使用 entityManager.removeMany() 批量删除多个实体:
import { inject } from '@angular/core';
import { RxDB } from '@aiao/rxdb';
const rxdb = inject(RxDB);
const completedTodos = await firstValueFrom(Todo.findMany({ where: { completed: true } }));
// 批量删除所有已完成的 todo
await rxdb.entityManager.removeMany(completedTodos);
removeMany() 将多个删除操作合并到一个 mutations 调用中,比逐条删除更高效。
删除流程
entity.remove()
│
▼
EntityManager.remove(entity)
│
▼
Repository.remove(entity)
│
▼
adapter.remove(entity) → 本地数据库
│
▼
同步层 → 远程数据库(如配置了同步)
注意事项
- 删除操作会立即从本地数据库中移除数据
- 如果配置了远程同步(如 Supabase 适配器),删除操作也会同步到远程
- 删除后,相关的查询订阅(如
findMany的 Observable)会自动更新结果