2017-04-26 185 views
2

如果我們查詢後,子節點的關鍵,從火力地堡數據,它在下載應用程序的整個子節點和過濾數據,或者下載查詢具體的數據?即過濾後的數據火力地堡查詢實現

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

myTopPostsQuery將根據starCount數據進行排序,我會在addChildEventListener()我想知道是否這個數據被過濾我的應用程序內接收後接收數據或我的應用程序下載量只有過濾後的數據來自Firebase。

回答

1

如果您在查詢中使用過濾器,你將下載查詢具體數據,而無需在客戶端上執行任何操作。 記住:

  • 只能同時使用一個次序的方法。在同一查詢中多次調用排序方法會引發錯誤。

  • 您可以將多個限度或範圍功能。例如,可以組合startAt()和endAt()方法將結果限制爲指定的值範圍。

對於任何其他信息需要讀取here

0

基於你在這裏粘貼代碼,您的查詢將只檢索所有的數據庫路徑user-posts/<id>與以有序的方式,這意味着,有沒有過濾的帖子。但是,您仍然可以在您查詢的路徑下找回所有可用的帖子。它可以是一個「半過濾器」,因爲它只會找到包含starCount字段的帖子

最好的辦法是在查詢過程中進行過濾,以便準確找回需要的內容,而不是像您正在進行的操作一樣。現在,想象一下這個帖子列表可能非常大,因此您稍後會遇到性能問題。

閱讀下面一節在這裏有關排序&過濾。

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

除此之外,考慮到在userId字段添加一個索引加快查詢。

1

您獲取已經過濾的數據。當您使用查詢時,例如,limitToLast(10)您只能獲得這10個元素。您的情況也發生在orderByChild("starCount")。在你的SnanpShot將只能找到那些過濾元素。請訪問official doc瞭解更多詳情。

希望它有幫助。