Firebase查询实现

时间:2017-04-26 13:50:30

标签: android firebase firebase-realtime-database

如果我们在子节点的密钥上查询Firebase中的数据,它是否会下载整个子节点并过滤应用程序中的数据,或者下载查询特定数据?即过滤后的数据

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

myTopPostsQuery会根据starCount对数据进行排序,我会收到addChildEventListener()中的数据我想知道在接收或我的应用下载后是否在我的应用内部过滤了这些数据仅来自Firebase的过滤数据。

3 个答案:

答案 0 :(得分:1)

您获得的数据已经过滤。当您使用查询时,请假设limitToLast(10)只获得那10个元素。对于orderByChild("starCount"),您的情况也会发生这种情况。在SnanpShot中,只会找到那些已过滤的元素。有关详细信息,请访问official doc

希望它有所帮助。

答案 1 :(得分:1)

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

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

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

  •   

对于任何其他信息,请阅读here

答案 2 :(得分:0)

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

的帖子

最好的办法是在查询过程中进行过滤,以便准确地找回所需的内容,而不是现在正在检索的所有内容,想象一下这个帖子列表可能非常大,所以你会遇到很大的性能问题后来。

请阅读以下有关排序和排序的部分。过滤

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

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