模型修改
模型修改就是把数据写回本地数据库。业务代码真正常用的入口不多,先记住下面几种:
- 单条实体:
save()、remove()、reset() - 批量实体:
rxdb.entityManager.saveMany()、rxdb.entityManager.removeMany() - 更底层写入:
rxdb.entityManager.create()、update()、remove()
推荐入口
| 场景 | 推荐 API | 说明 |
|---|---|---|
| 新建一条数据 | new Entity() + entity.save() | 默认主路径 |
| 更新一条数据 | 改属性后 entity.save() | 根据 status.local 自动走 create / update |
| 删除一条数据 | entity.remove() | 已有实体实例时最直接 |
| 批量创建或更新 | rxdb.entityManager.saveMany() | 统一合成 mutation |
| 批量删除 | rxdb.entityManager.removeMany() | 避免逐条删除 |
写入关系图
单条写入流程
状态判断
import { getEntityStatus } from '@aiao/rxdb';
const status = getEntityStatus(todo);
console.log(status.local);
console.log(status.modified);
local === false:实体还没写入本地库local === true:实体已经存在于本地库modified === true:当前有未保存改动
关于事务
当前业务文档不把某个公开 rxdb.transaction(...) 当成主入口,因为稳定公开的业务写法仍然还是:
save()remove()saveMany()removeMany()
如果你真的要控制更底层的事务边界,那已经进入 adapter 层,见 事务机制。