首页 > 解决方案 > 如何仅读取 Firebase 实时数据库中的更改

问题描述

我有一个带有读数的数据库集合,需要检查每个新读数是否异常,如果是,则需要发送警报。

所以我在使用db.ref('collection').on('child_added', (child => { check(child); }); .on 函数的问题是,当添加监听器时,也会读取所有以前的数据。

那么如何读取仅读取数据库中更改的集合,以及首次添加侦听器时?或者如果这不起作用,我如何区分已经添加的数据和新数据?

标签: javascriptfirebasefirebase-realtime-database

解决方案


Firebase 数据库会同步您将侦听器附加到的任何查询或引用的状态。没有选项只能将新节点内置到 API 中。

如果您只想要新节点,则必须:

  1. 确保每个节点都有相关的时间戳或顺序。如果您使用 Firebase 的内置push()键,这些键可能已经提供了该功能。
  2. 了解“新”对客户端意味着什么,例如通过保留最后一个时间戳或它看到的按键。
  3. 然后使用查询仅在存储时间戳/键之后请求节点。

因此,例如,如果您只想读取在附加侦听器之后创建的节点,您可以执行以下操作:

let now = db.ref('collection').push().key; // determine current key
db.ref('collection').orderByKey().startAt(now).on('child_added', ...)

推荐阅读