QueryCacheRepository<T>
Defined in: packages/rxdb/src/repository/QueryCacheRepository.ts:147
QueryCache 同步策略仓库
Example
const repo = new QueryCacheRepository('Product', remoteAdapter, localAdapter);
// 查询 - 自动增量同步
const products = await firstValueFrom(repo.find({ where: { combinator: 'and', rules: [] } }));
// 单个查询
const product = await firstValueFrom(repo.findById('product-123'));
Type Parameters
| Type Parameter | Default type | Description |
|---|---|---|
T extends EntityBaseType | EntityBaseType | 实体类型 |
Constructors
Constructor
new QueryCacheRepository<T>(
entityName,
remoteAdapter,
localAdapter): QueryCacheRepository<T>;
Defined in: packages/rxdb/src/repository/QueryCacheRepository.ts:154
Parameters
| Parameter | Type |
|---|---|
entityName | string |
remoteAdapter | QueryCacheRemoteAdapter |
localAdapter | QueryCacheLocalAdapter |
Returns
QueryCacheRepository<T>
Properties
entityName
readonly entityName: string;
Defined in: packages/rxdb/src/repository/QueryCacheRepository.ts:152
实体名称
Methods
create()
create(data): Observable<InstanceType<T>>;
Defined in: packages/rxdb/src/repository/QueryCacheRepository.ts:308
创建实体
执行远程优先写入策略:
- 写入远程数据库
- 远程成功后,将返回数据缓存到本地
- 返回服务器生成的完整实体(可能包含服务器生成的 id/updatedAt)
Parameters
| Parameter | Type | Description |
|---|---|---|
data | Partial<InstanceType<T>> | 要创建的实体数据 |
Returns
Observable<InstanceType<T>>
Observable<InstanceType<T>> - 创建成功的实体
Throws
远程写入失败时抛出错误,本地不写入
Example
repo.create({ name: 'New Product', price: 99 })
.subscribe(product => console.log('Created:', product.id));
delete()
delete(ids): Observable<void>;
Defined in: packages/rxdb/src/repository/QueryCacheRepository.ts:372
删除实体
执行远程优先写入策略:
- 从远程数据库删除
- 远程成功后,从本地缓存删除
Parameters
| Parameter | Type | Description |
|---|---|---|
ids | string | string[] | 要删除的实体 ID 或 ID 数组 |
Returns
Observable<void>
Observable<void>
Throws
远程删除失败时抛出错误,本地不删除
Example
repo.delete('product-123').subscribe(() => console.log('Deleted'));
repo.delete(['p1', 'p2', 'p3']).subscribe(() => console.log('Batch deleted'));
find()
find(options): Observable<InstanceType<T>[]>;
Defined in: packages/rxdb/src/repository/QueryCacheRepository.ts:194
查询实体列表
执行 QueryCache 同步流程:
- fetchMetadata → 获取远程元数据
- getMetadataByIds → 获取本地元数据
- diffMetadata → 对比得出需要拉取的 ID
- findByIds → 只拉取 missing + stale
- upsertMany → 写入本地缓存
- 返回合并结果
当 localCacheFirst: true 时 (SWR 模式):
- 立即返回本地缓存(如果有)
- 后台执行上述同步流程
- 如果数据有变化,发射更新后的结果
Parameters
| Parameter | Type | Description |
|---|---|---|
options | QueryCacheFindOptions<T> | 查询选项 |
Returns
Observable<InstanceType<T>[]>
Observable<InstanceType<T>[]>
Example
repo.find({ where: { combinator: 'and', rules: [{ field: 'status', operator: 'eq', value: 'active' }] } })
.subscribe(products => console.log(products));
// SWR 模式
repo.find({ where: { ... }, localCacheFirst: true })
.subscribe(products => {
// 第一次发射:本地缓存(立即)
// 第二次发射:远程更新后数据(如果有变化)
});
findById()
findById(id): Observable<InstanceType<T> | null>;
Defined in: packages/rxdb/src/repository/QueryCacheRepository.ts:245
按 ID 查询单个实体
Parameters
| Parameter | Type | Description |
|---|---|---|
id | EntityStaticType<T, "idType"> | 实体 ID |
Returns
Observable<InstanceType<T> | null>
Observable<InstanceType<T> | null>
Example
repo.findById('product-123')
.subscribe(product => console.log(product));
update()
update(id, data): Observable<InstanceType<T>>;
Defined in: packages/rxdb/src/repository/QueryCacheRepository.ts:341
更新实体
执行远程优先写入策略:
- 更新远程数据库
- 远程成功后,将返回数据缓存到本地(使用服务器返回的最新 updatedAt)
- 返回更新后的完整实体
Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | 实体 ID |
data | Partial<InstanceType<T>> | 要更新的字段 |
Returns
Observable<InstanceType<T>>
Observable<InstanceType<T>> - 更新成功的实体
Throws
远程更新失败时抛出错误,本地不更新
Example
repo.update('product-123', { price: 199 })
.subscribe(product => console.log('Updated:', product.updatedAt));