【问题标题】:Firebase better way of getting total number of recordsFirebase 获取记录总数的更好方法
【发布时间】:2012-07-13 09:31:00
【问题描述】:

来自交易文档,第二段:

这里的目的是让客户端增加 发送的聊天消息(暂时忽略有更好的方法 实现这一点)。

有哪些标准的“更好的方法”来实现这一点?

具体来说,我正在尝试做一些事情,比如检索最近的 50 条记录。这要求我从列表的末尾开始,所以我需要一种方法来确定最后一条记录是什么。

我看到的选项:

  • 每次添加记录时使用事务更新计数器,将计数器值与 setPriority() 一起使用进行排序
  • forEach() 父级并读取所有记录,在客户端进行我自己的排序/过滤
  • 编写服务器代码来分析 Firebase 表并创建索引列表,例如“mostRecent Messages”和“totalNumberOfMessages”

我错过了明显的选择吗?

【问题讨论】:

    标签: firebase


    【解决方案1】:

    要查看列表中的最后 50 条记录,只需调用“limit()”,如下所示:

    var data = new Firebase(...);
    data.limit(50).on(...);
    

    Firebase 元素首先按优先级排序,如果优先级匹配(或未设置),则按名称按字典顺序排列。 push() 命令会自动创建按时间顺序排列的元素,因此如果您使用 push(),则无需额外工作即可使用 limit()。

    要计算列表中的元素,我建议添加一个“值”回调,然后遍历快照(或执行我们提到的事务方法)。文档中的注释实际上是指我们尚未发布的一些即将推出的功能,这些功能将允许您在不先加载元素的情况下对元素进行计数。

    【讨论】:

    • 如果它们是按字典顺序排列的,那么 limit(...).on(...) 不会返回列表中的前 50 个项目吗?另外,当列表中少于 50 个时会发生什么?没有办法知道,因为我们会在 on(...) 调用中无限期地等待。我知道这并不适用于所有情况,但我真的想了解诸如分页和范围之类的事情是如何工作的。
    • 它在获取数据时仍然会返回,但它只会少于 50 条记录。只要我们听到来自服务器的响应,无论是否有 N 条记录可用,我们都会触发值回调。
    • 你也可以结合使用limit()和startAt或者endAt查询来做分页,或者查看前50条等
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 2011-07-03
    • 2017-08-11
    相关资源
    最近更新 更多