【问题标题】:Firebase query implementationFirebase 查询实现
【发布时间】:2017-09-23 23:20:34
【问题描述】:

如果我们根据子节点的键从 Firebase 查询数据,它是下载整个子节点并在应用程序中过滤数据还是下载查询特定的数据?即过滤后的数据

String myUserId = getUid();
Query myTopPostsQuery = databaseReference.child("user-posts").child(myUserId).orderByChild("starCount");
myTopPostsQuery.addChildEventListener(new ChildEventListener() {});

myTopPostsQuery 将根据starCount 对数据进行排序,我将在addChildEventListener() 接收数据火力基地。

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    如果您在查询中使用过滤器,您将下载查询特定的数据,而无需在客户端执行任何操作。 请记住:

    • 您一次只能使用一种排序方法。在同一个查询中多次调用 order-by 方法会引发错误。

    • 您可以组合多个限制或范围功能。例如,您可以结合 startAt() 和 endAt() 方法将结果限制在指定的值范围内。

    有关任何其他信息,请阅读here

    【讨论】:

      【解决方案2】:

      您会得到已过滤的数据。当您使用查询时,比如说limitToLast(10),您只会得到这 10 个元素。这也发生在您使用orderByChild("starCount") 的情况下。在您的SnanpShot 中只会找到那些过滤的元素。详情请访问official doc

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

        根据您在此处粘贴的代码,您的查询将仅以有序方式检索数据库路径 user-posts/<id> 的所有帖子,这意味着没有过滤器。但是您仍然会取回您正在查询的路径下的所有可用帖子。它可以是一个“半过滤器”,因为它只会找到包含starCount 字段的帖子

        最好的办法是在查询期间进行过滤,以便准确检索需要的内容,而不是您现在正在执行的所有内容,想象一下这个帖子列表可能非常大,因此您会遇到很大的性能问题之后。

        在此处阅读以下有关排序和过滤的部分。

        https://firebase.google.com/docs/database/admin/retrieve-data#orderbychild

        除此之外,考虑在userId 字段中添加索引以加快查询速度。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-04-11
          • 1970-01-01
          • 2017-04-04
          • 2017-12-10
          • 1970-01-01
          • 2013-12-27
          相关资源
          最近更新 更多