2013-06-20 17 views
13

Ho la seguente gerarchia sulla Firebase, alcuni dati sono nascosti fini di riservatezza:Ottieni i nomi dei nodi secondari di Firebase senza ottenere i loro figli nella risposta di Firebase?

enter image description here

Sto cercando di ottenere un elenco di video ID (sottolinea in rosso)

Posso solo ottenere tutti i nodi, quindi rilevare i loro nomi e memorizzarli in un array!
Ma questo causa basse prestazioni; perché il dataSnapshot da firebase è molto grande nel mio caso, quindi voglio evitare di recuperare il contenuto di tutti i nodi e quindi ricorrere ad essi per ottenere gli ID, ho solo bisogno di recuperare solo gli ID, cioè senza i loro elementi nidificati.

Ecco il mio codice:

new Firebase("https://PRIVATE_NAME.firebaseio.com/videos/").once(
    'value', 
    function(dataSnapshot){ 

     // dataSnapshot now contains all the videos ids, lines & links 
     // this causes many performance issues 

     // Then I need to loop over all elements to extract ids ! 
     var videoIdIndex = 0; 
     var videoIds = new Array(); 

     dataSnapshot.forEach(
      function(childSnapshot) { 
       videoIds[videoIdIndex++] = childSnapshot.name(); 
      } 
     ); 

    } 
); 

Come posso recuperare solo gli ID per evitare sacco di trasferimento dei dati e per evitare il loop sui dati retrived per ottenere gli ID? c'è un modo per ritirare questi ID direttamente?

risposta

10

AGGIORNAMENTO: Esiste ora un comando shallow nell'API REST che recupererà solo le chiavi per un percorso. Questo non è stato ancora aggiunto agli SDK.

In Firebase, non è possibile ottenere un elenco di nomi nodo senza recuperare i dati sottostanti. Non ancora comunque. I problemi di prestazioni possono essere risolti con la normalizzazione.

In sostanza, l'obiettivo è dividere i dati in blocchi consumabili. Memorizza la tua lista di chiavi video, possibile con un paio di campi meta come titolo, ecc, in un percorso, e memorizzare il contenuto di massa da qualche altra parte. Per esempio:

/video_meta/id/link, title, ... 
/video_lines/id/... 

Per saperne di più su denormalizing, leggi questo articolo: https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

+1

hey @Kato, c'è qualche programma di aggiungere 'shallow' a SDK? –

+0

Nessuno. Stai usando uno strumento che non può fare una richiesta HTTP? Se ciò non è pratico, è possibile memorizzare l'elenco di ID in un percorso sep per riferimento SDK. Vedi aggiornamenti multi-percorso. – Kato

5

E 'un po' vecchio, e probabilmente già sanno, ma nel caso in cui qualcun altro viene avanti. Si può fare questa chiamata API REST utilizzando, è sufficiente impostare il parametro shallow=true

qui è la documentation

+0

Questo è molto utile, non era disponibile a giugno 2013, grazie mille per aver condiviso questo aggiornamento! –

+0

può essere fatto con web API? – vinesh

+0

Io non la penso così, hanno introdotto superficiale solo in questo ottobre per REST – webduvet

Problemi correlati