javascript - 如何仅读取 Firebase 实时数据库中的更改
问题描述
我有一个带有读数的数据库集合,需要检查每个新读数是否异常,如果是,则需要发送警报。
所以我在使用db.ref('collection').on('child_added', (child => { check(child); });
.on 函数的问题是,当添加监听器时,也会读取所有以前的数据。
那么如何读取仅读取数据库中更改的集合,以及首次添加侦听器时?或者如果这不起作用,我如何区分已经添加的数据和新数据?
解决方案
Firebase 数据库会同步您将侦听器附加到的任何查询或引用的状态。没有选项只能将新节点内置到 API 中。
如果您只想要新节点,则必须:
- 确保每个节点都有相关的时间戳或顺序。如果您使用 Firebase 的内置
push()
键,这些键可能已经提供了该功能。 - 了解“新”对客户端意味着什么,例如通过保留最后一个时间戳或它看到的按键。
- 然后使用查询仅在存储时间戳/键之后请求节点。
因此,例如,如果您只想读取在附加侦听器之后创建的节点,您可以执行以下操作:
let now = db.ref('collection').push().key; // determine current key
db.ref('collection').orderByKey().startAt(now).on('child_added', ...)
推荐阅读
- python - 将同一列的行复制到 Pandas Dataframe 中的不同索引。将一个月的数据复制到另一个
- c# - 为什么当我使用 WebClient 类时我的 web api 返回状态码 401,而当我使用 HttpWebResponse 时返回状态码 200?
- go - Gorm 动态忽略字段
- json - 在必须满足两个条件时过滤 json。一个用于键,一个在嵌套数组中用于带有 jq 的选定元素
- node.js - 在使用节点 js 保存到 Firebase Cloud Firestore 之前跳过重复项
- slack - 使用 slack api 向 slack 发布消息时如何忽略表情符号?
- ios - iOS 13 > 当应用程序被杀死且不在后台时,通用应用程序链接不起作用
- javascript - 单击图像时复制图像位置
- android - Android 模拟器 EXIF 数据
- xamarin - 复选框值/无 MVVM Xamarin