Firebase retrieve highest 100 score

Multi tool use
Firebase retrieve highest 100 score
This is a screen shot of my firebase:
I am trying to retrieve the highest 100 score in firebase database
I am using this code to add new node to firebase:
Map<String, String> post1 = new HashMap<String, String>();
post1.put("name",name);
post1.put("score",score);
myRef.push().setValue(post1);
And this is the code I am using to retrieve the highest 100 score which doesn't work (the code works but it is not retrieving the highest 100 score)
Query queryRef = myRef.orderByChild("score").limitToFirst(100);
queryRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
Score score=postSnapshot.getValue(Score.class);
Log.d("test"," values is " + score.getName() + " " + score.getScore());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
1 Answer
1
Firebase queries are always in ascending order. So you'll need to get the last 100, instead of the first 100.
Query queryRef = myRef.orderByChild("score").limitToLast(100);
Then client-side you'll need to reverse the items.
Alternatively you can add a inverted property to your items invertedScore: -99
. If you do that, you can order by that inverted score and won't have to reverse the array.
invertedScore: -99
This scenario has been covered frequently before. I highly recommend you study some of these:
I'm wondering if this will actually work because in the question the scores are strings and not numbers. Won't it sort something like this: "1", "12", "2", "3", "33", "333", "4"?
– André Kool
Sep 14 '16 at 14:29
Darn.... good catch André. Apparently I have a blind spot, because I swear I checked whether they were stored as number. The above will indeed only work if you store the scores as number (or as zero-padded strings).
– Frank van Puffelen
Sep 14 '16 at 15:00
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
It's better to store scores as number instead of strings. Check out the comments on frank's answer for more info.
– André Kool
Sep 15 '16 at 11:37