首页 > 解决方案 > Firestore - 仅获取大型同步集合中的更改文档

问题描述

我已阅读以下所有问题,但在文档中找不到任何内容来描述如何同步集合并仅从集合中接收已更改的文档。我的同步集合中有超过 500 个文档(使用redux-saga-firebase syncCollection),但通常只有大约 100 个会更改。在任何给定的时间,甚至更少会发生变化,但我目前正在恢复所有 500 多个文档,即使一个文档发生更改,也会导致 500 多个读取。不理想,而且会让我付出巨大的代价。

这是我使用 redux-saga-firebase 的代码,但一个普通的 firebase 代码答案也足够了。如何获得发送集合中更改的文档的同步响应?

export function* getPlayersFromDb() {
  yield fork(
    rsf.firestore.syncCollection,
    'players',
    { successActionCreator: response => ({
            type: t.GET_PLAYERS_FROM_DB_SUCCESS,
            payload: [...response],
        }),
        failureActionCreator: () => ({
            type: t.GET_PLAYERS_FROM_DB_FAILURE,
            payload: [],
        }),
        transform: response => messageTransformer(response),
    }
);

}

Firestore 同步是否仅存在差异?

领域与 Firestore 上的大型集合同步 - 架构问题/问题

如何使用缓存避免不必要的 Firestore 读取

Firestore 同步到底有什么作用?

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


Firestore 查询没有“仅查询已更改的内容”的概念。您将需要自己创建该概念。执行此操作的常用方法是在每个文档中记录其上次更新时间的时间戳,然后在范围过滤器中使用该字段来仅获取自收到最新更新以来更新的文档。您将需要在客户端中跟踪最新的更新时间戳。一种可能性是使用迄今为止在任何文档中看到的最大时间戳。


推荐阅读