跳到主要内容

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 ParameterDefault typeDescription
T extends EntityBaseTypeEntityBaseType实体类型

Constructors

Constructor

new QueryCacheRepository<T>(
entityName,
remoteAdapter,
localAdapter): QueryCacheRepository<T>;

Defined in: packages/rxdb/src/repository/QueryCacheRepository.ts:154

Parameters

ParameterType
entityNamestring
remoteAdapterQueryCacheRemoteAdapter
localAdapterQueryCacheLocalAdapter

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

创建实体

执行远程优先写入策略:

  1. 写入远程数据库
  2. 远程成功后,将返回数据缓存到本地
  3. 返回服务器生成的完整实体(可能包含服务器生成的 id/updatedAt)

Parameters

ParameterTypeDescription
dataPartial<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

删除实体

执行远程优先写入策略:

  1. 从远程数据库删除
  2. 远程成功后,从本地缓存删除

Parameters

ParameterTypeDescription
idsstring | 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 同步流程:

  1. fetchMetadata → 获取远程元数据
  2. getMetadataByIds → 获取本地元数据
  3. diffMetadata → 对比得出需要拉取的 ID
  4. findByIds → 只拉取 missing + stale
  5. upsertMany → 写入本地缓存
  6. 返回合并结果

localCacheFirst: true 时 (SWR 模式):

  1. 立即返回本地缓存(如果有)
  2. 后台执行上述同步流程
  3. 如果数据有变化,发射更新后的结果

Parameters

ParameterTypeDescription
optionsQueryCacheFindOptions<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

ParameterTypeDescription
idEntityStaticType<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

更新实体

执行远程优先写入策略:

  1. 更新远程数据库
  2. 远程成功后,将返回数据缓存到本地(使用服务器返回的最新 updatedAt)
  3. 返回更新后的完整实体

Parameters

ParameterTypeDescription
idstring实体 ID
dataPartial<InstanceType<T>>要更新的字段

Returns

Observable<InstanceType<T>>

Observable<InstanceType<T>> - 更新成功的实体

Throws

远程更新失败时抛出错误,本地不更新

Example

repo.update('product-123', { price: 199 })
.subscribe(product => console.log('Updated:', product.updatedAt));