2013-02-28 13 views
6

Zajmuję się wdrażaniem indeksu bazy danych w trybie opisanym tutaj: https://stackoverflow.com/a/10559689/534086 i próbuję znaleźć sposób na sortowanie danych w porządku malejącym. Czy to możliwe, jeśli masz węzeł z dziećmi "a", "b", "c", aby odzyskać je "c", "b", "a"? (mimo że nadal można je odzyskać w oryginalnej kolejności?)Możliwe przemieszczenie dzieci węzła Bazy Firebase w odwrotnej kolejności?

Jeśli nie jest możliwe przechodzenie przez węzeł zarówno do przodu, jak i do tyłu i muszę utworzyć dwa indeksy, jest to łatwy algorytm generowania kluczy, które sortują w odwrotnym porządku leksykograficznym? Dla liczb, myślę, że możesz pomnożyć przez -1, ale nie wiesz jak obsługiwać ciągi znaków ...

Odpowiedz

9

Brzmi to, co chcesz, to zapytanie "odwróć()" podobne do tego, jak działa teraz "limit()" . Firebase nie może tego jeszcze zrobić, ale planujemy ją dodać.

W zależności od przypadku użycia może to być dość proste. Jeśli, na przykład, używasz sortowania Firebase do utrzymywania listy w kolejności, w jakiej jest wyświetlana użytkownikowi, możesz po prostu zmodyfikować logikę wyświetlania, aby renderować elementy do tyłu (na przykład przedinstaluj elementy zamiast dodawać). Jeśli pytasz, aby wybrać okno danych z dużego zbioru dzieci (powiedzmy, aby uzyskać pierwsze 10 pozycji z długiej listy), kolejność sortowania nie powinna być ważna - Twoje początkowe i końcowe punkty dla zapytanie pozostanie niezmienione, z wyjątkiem tego, że zostaną one odwrócone.

+0

Tak, "reverse()" byłoby idealne. Jeśli chodzi o pracę, drugi przypadek (duży zestaw dzieci, czasami chcę mieć kilka pierwszych pozycji, czasami chcę tych ostatnich) jest tym, co mnie interesuje. Nie jestem pewien, czy rozumiem twoją sugestię ... czy mówisz to .startAt (100) .endAt (20) będzie iterować wstecz od 100 do 20? (co byłoby niesamowite) – josh

+6

Sugeruję, że możesz zrobić startAt (20) .endAt (100), a następnie renderować je wstecz. –

+11

@andrewlee obiecuje obiecuje obietnice. "Wkrótce dodamy metodę reverse() i offset()! Obiecujemy!" 1 1/2 lat później wciąż tkwimy w tych samych kwestiach. :) Twoje rozwiązanie nie działa dla stronicowania dużych zestawów danych! – CodingWithoutComments

0

Czy możesz użyć limitToLast() i samodzielnie sortować zestaw wyników? Wiem, że takie rzeczy działają, gdy używasz Angular, gdzie items jest obiektem tablicy Firebase w $ scope;

<li ng-repeat="item in items | orderBy:'-fieldName'"> {{ item.fildName }}</li> 
Powiązane problemy