2013-02-28 8 views
6

Sto cercando di implementare un indice in firebase come descritto qui: https://stackoverflow.com/a/10559689/534086 e cercando di capire come gestire l'ordinamento in ordine decrescente. È possibile che tu abbia un nodo con figli "a", "b", "c" per recuperarli "c", "b", "a"? (pur essendo ancora in grado di recuperarli nell'ordine originale?)È possibile attraversare i figli di un nodo Firebase in ordine inverso?

Se non è possibile attraversare il nodo sia in avanti che all'indietro e ho bisogno di creare due indici, è loro un facile algoritmo per generare chiavi che ordinano in ordine lexografico inverso? Per i numeri, penso che puoi moltiplicare per -1, ma non sei sicuro di come gestire le stringhe ...

risposta

9

Sembra che quello che vuoi sia una query "reverse()" simile a come "limit()" funziona ora . Firebase non può ancora farlo, ma abbiamo intenzione di aggiungerlo.

A seconda del caso d'uso, potrebbe essere piuttosto semplice aggirare questo problema. Se, per esempio, stai utilizzando l'ordinamento di Firebase per mantenere un elenco in ordine che viene visualizzato all'utente, puoi semplicemente modificare la logica di visualizzazione per eseguire il rendering delle cose indietro (anteporre elementi invece di append per esempio). Se stai interrogando per selezionare una finestra di dati da un ampio gruppo di bambini (ad esempio, per ottenere i primi 10 elementi da una lunga lista), l'ordinamento non dovrebbe essere importante - i tuoi punti di inizio e fine per la query rimarrà la stessa eccetto che saranno invertiti.

+0

Sì, "reverse()" sarebbe perfetto. In termini di work around, il secondo caso (una grande serie di bambini, a volte voglio i primi pochi elementi, a volte voglio gli ultimi pochi) è ciò che mi interessa. Non sono sicuro di aver capito il tuo suggerimento ... stai dicendo che .startAt (100) .endAt (20) itererà all'indietro da 100 a 20? (che sarebbe fantastico) – josh

+6

Sto suggerendo che puoi fare startAt (20) .endAt (100) e poi semplicemente renderli all'indietro. –

+11

@andrewlee promette promesse promesse. "Presto aggiungeremo un reverse() e un offset()! Promettiamo!" 1 1/2 anni dopo siamo ancora bloccati sugli stessi problemi. :) La tua soluzione non funziona per l'impaginazione di grandi serie di dati! – CodingWithoutComments

0

È possibile utilizzare limitToLast() e ordinare personalmente il set di risultati? So che questo genere di cose funziona se si utilizza Angular, dove items è un oggetto array Firebase in $ scope;

<li ng-repeat="item in items | orderBy:'-fieldName'"> {{ item.fildName }}</li> 
Problemi correlati