火力地堡查询实现

问题描述:

如果我们查询后,子节点的关键,从火力地堡数据,它在下载应用程序的整个子节点和过滤数据,或者下载查询具体的数据?即过滤后的数据火力地堡查询实现

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

myTopPostsQuery将根据starCount数据进行排序,我会在addChildEventListener()我想知道是否这个数据被过滤我的应用程序内接收后接收数据或我的应用程序下载量只有过滤后的数据来自Firebase。

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

  • 只能同时使用一个次序的方法。在同一查询中多次调用排序方法会引发错误。

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

对于任何其他信息需要读取here

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

最好的办法是在查询过程中进行过滤,以便准确找回需要的内容,而不是像您正在进行的操作一样。现在,想象一下这个帖子列表可能非常大,因此您稍后会遇到性能问题。

阅读下面一节在这里有关排序&过滤。

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

除此之外,考虑到在userId字段添加一个索引加快查询。

您获取已经过滤的数据。当您使用查询时,例如,limitToLast(10)您只能获得这10个元素。您的情况也发生在orderByChild("starCount")。在你的SnanpShot将只能找到那些过滤元素。请访问official doc了解更多详情。

希望它有帮助。