【问题标题】:Get Firebase data ordered by value获取按值排序的 Firebase 数据
【发布时间】:2013-07-19 22:54:54
【问题描述】:

有什么方法可以根据值获取一定数量的 Firebase 数据条目。例如,如果某个条目有 100 个孩子,每个孩子都有一个数字值,那么有没有办法请求具有最高值的 10 个孩子?

编辑:我意识到我可以简单地请求父级并遍历整个数据层次结构,直到找到具有最大值的十个,但这会浪费用户的数据,特别是如果父级包含数千个子级.

【问题讨论】:

    标签: firebase


    【解决方案1】:

    使用 firebase,您正在处理一个 nosql 数据库。使用 nosql 数据库时,在写入数据时生成报告,而不是在读取数据时生成报告。

    例如。对于您提到的情况,维护另一个始终包含前十个记录(或指向它们的指针)的对象。

    每次将记录写入数据库时​​,检查前十名的列表,如果该记录也属于那里,在这种情况下,请执行必要的操作。

    这种方法比遍历数据库更快、更有效。

    【讨论】:

    • 我喜欢针对特定情况的解决方案,但是假设我想要标识符以特定字母开头的记录的前十个值。我正在寻求实现一种搜索,该搜索返回给定查询的前十项。似乎只有当我只关心有限数量的前十名列表时,此解决方案才有效。
    • 这只是一个例子。如果数据库的索引功能不适合您的目的,我们的想法是在将数据写入数据库时​​构建您自己的索引。
    【解决方案2】:

    存储记录时,请使用setPriority。然后您可以按如下方式检索具有最高值的那些:

    firebaseRef.child.limit(10).on(...);
    

    或者您可以按如下方式分页或抓取特定集合:

    firebaseRef.endAt(250).limit(10).on(...);
    

    【讨论】:

    • 所以我应该将优先级设置为与值相同?
    • 如果该值是与您要排序/查询的标准完全匹配的原语,是的。
    • 似乎有点多余,尽管我想它会起作用。我是否以非预期的方式使用 Firebase?寻找替代后端会更好吗?
    • 这是使用 Firebase 的一种非常合理的方式。将会发生一些重复。这是快速数据存储的本质(例如,每次在 SQL 中创建索引时都会发生这种情况)。
    猜你喜欢
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多