javascript - 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 查询没有“仅查询已更改的内容”的概念。您将需要自己创建该概念。执行此操作的常用方法是在每个文档中记录其上次更新时间的时间戳,然后在范围过滤器中使用该字段来仅获取自收到最新更新以来更新的文档。您将需要在客户端中跟踪最新的更新时间戳。一种可能性是使用迄今为止在任何文档中看到的最大时间戳。
推荐阅读
- angular6 - 如何使用 angular + 从数组中删除列表
- azure - 如何更新 azurerm_network_interface 的 ip_configuration 以添加 azurerm_public_ip?
- node.js - 执行图表生成时出现 0x03 错误:请检查您在 Highchart 中的输入数据
- ruby-on-rails - Rails:切换到 puma 以获取请求规格
- javascript - 通过将选项传递给模式,使所有字段或某些字段成为必需字段
- javascript - 如何将 unicode 十六进制值转换为 Javascript 中的字符串字符?
- node.js - App Engine Node.js 错误:排队的消息过多
- yocto - libiomp5.so 的多个 shlib 提供程序
- c++ - 构造函数委托与默认参数
- high-availability - 具有 2 个节点 proxmox 的 HA 集群