Sung Kim
Sung Kim

Reputation: 8536

firebaseArray descending order?

Using firebaseArray, is it possible to order by a specified child key: (https://www.firebase.com/docs/web/guide/retrieving-data.html#section-queries)?

var fireRef = new Firebase(https://dinosaur-facts.firebaseio.com/dinosaurs);
var query = fireRef.orderByChild("echo").limitToFirst(25);
var todos = $firebaseArray(query);

However, by default, Firebase retrieves the keys in ascending order.

Children with a numeric value come next, sorted in ascending order.

Is there any way to get results in the descending order directly from firebaseArray? For example, do they have anything like .reverse() or .orderBy(desc, ...)?

Upvotes: 12

Views: 13825

Answers (2)

Alan
Alan

Reputation: 1700

This doesn't directly answer the original question, but for anyone using FirebaseUI Java/Android, with a RecyclerView, it's possible to order the RecyclerView in reverse, rather than using a query on Firebase:

Example:

LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager)

(Ensuring you set both before adding the layout manager to the RecyclerView also)

Github issue: https://github.com/firebase/FirebaseUI-Android/issues/90#issuecomment-230643303

Upvotes: 14

Svitlana
Svitlana

Reputation: 3006

Here is how you can order by date. Just use queryOrderedByChild(dateKey) and it will be in asc order, to make desc you can do array.reverse()

POST_REF.queryOrderedByChild(PostKeys.kPostDate).observeEventType(.Value, withBlock: {
  snapshot in

  var localPosts = [Post]()
    for item in snapshot.children {
      let postItem = Post(snapshot: item as! FDataSnapshot)
      localPosts.append(postItem)
    }
  //Display at desc order
   let reverseResults = localPosts.reverse() as [Post]
       completion(postsArray: reverseResults)
    }, withCancelBlock: { error in
   completion(postsArray: nil)
})

Upvotes: 1

Related Questions