云开发数据库支持实时推送变更数据的能力,给定查询条件,每当数据库更新而导致查询条件对应的查询结果发生变更时,小程序可收到一个更新事件,其中可获取更新内容和更新后的查询结果快照。

    实时数据推送有广泛应用场景,此处是一些示例:

    • 聊天/即时通信:小游戏内聊天、大厅广播、区服广播等;企业内部小程序中的即时通信能力等
    • 协作工具:如在线协作文档、团队任务管理等
    • 实时应用状态同步:以信息流为例,可以实时获取最新文章、以及最新评论、点赞、通知等内容,让交互更顺畅自然

    调用 上的 watch 方法即可监听给定查询条件对应的数据:

    onChangeonError 是必传参数。onChange 用于接收变更快照,onError 用于处理监听错误。如果监听发起失败或监听过程中出现不可恢复的错误,则会终止监听并通过 onError 抛出异常。onChange 会在第一次监听初始化及后续数据变更时收到推送事件。第一次初始化时会收到的查询条件对应的查询结果(此处不会有默认 20 条上限,包含集合中所有满足查询条件的记录),后续变更事件会包含变更内容和变更后的查询结果快照。

    收到的 snapshot 变更快照中带有如下字段:

    DataType 枚举值

    QueueType 枚举值

    变更事件会细分记录数据变更类型 dataType 和监听列表变更类型 queueType,其可能的搭配和意义如下。

    监听

    监听返回的数据不受默认 20 条限制

    监听返回的数据可能超过 20 条,不受小程序端默认 20 条上限限制。

    监听暂仅支持 where 语句,不支持 orderBylimit、 等语句。

    监听记录数限制

    一次监听的记录数上限为 5000,若超出上限会抛错并停止监听。监听过大量的数据时初始化会较慢,对监听效率也有影响,如果预期监听发起时少于 5000,但后续有可能超过 5000,请注意在即将超过时重新监听并保证不超过 5000。

    注意集合权限设置

    集合的读权限设置在实时数据推送里同样生效,如果权限是设置为仅可读用户自己的数据,则监听的时候无法监听到非用户自己创建的数据。

    只监听必要的数据