2013-06-20 7 views
13

ich die folgende Hierarchie auf Feuerbasis haben, werden einige Daten zur Vertraulichkeit versteckt:Erhalten Sie die Namen der Firebase-Kindknoten, ohne ihre Kinder in der Firebase-Antwort zu erhalten?

enter image description here

Ich versuche, eine Liste der Videos IDs zu bekommen (in rot unterstreicht)

Ich kann nur Holen Sie alle Knoten, dann erkennen Sie ihre Namen und speichern Sie sie in einem Array!
Aber das verursacht eine geringe Leistung; Da die dataSnapshot von Firebase in meinem Fall sehr groß ist, also möchte ich vermeiden, den Inhalt aller Knoten abzurufen, dann Schleife über sie, um IDs zu erhalten, muss ich nur die IDs nur abrufen, d. h. ohne ihre verschachtelten Elemente.

Hier ist mein Code:

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(); 
      } 
     ); 

    } 
); 

Wie kann ich abrufen nur IDs Menge der Datenübertragung zu vermeiden und Schleifen über retrived Daten zu vermeiden IDs zu bekommen? Gibt es eine Möglichkeit, diese IDs direkt zu recen?

Antwort

10

UPDATE: In der REST-API gibt es jetzt einen shallow-Befehl, der nur die Schlüssel für einen Pfad abruft. Dies wurde den SDKs noch nicht hinzugefügt.

In Firebase können Sie keine Liste der Knotennamen abrufen, ohne die darunter liegenden Daten abzurufen. Noch nicht sowieso. Die Performance-Probleme können mit Normalisierung behoben werden.

Im Wesentlichen besteht Ihr Ziel darin, Daten in konsumierbare Abschnitte aufzuteilen. Speichern Sie Ihre Liste von Videoschlüsseln, möglich mit ein paar Meta-Feldern wie Titel usw., in einem Pfad und speichern Sie den Masseninhalt woanders. Zum Beispiel:

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

Um mehr über Denormalisierung zu erfahren, lesen Sie in diesem Artikel: https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

+1

hey ist @Kato, ist es Pläne 'shallow' zu SDK hinzufügen? –

+0

Keine. Verwenden Sie ein Tool, das keine HTTP-Anfrage stellen kann? Wenn das nicht praktikabel ist, können Sie die Liste der IDs in einem separaten Pfad für die SDK-Referenz speichern. Siehe Mehrpfad-Updates. – Kato

5

Es ist ein bisschen alt, und Sie wahrscheinlich bereits wissen, aber im Falle jemand anderes kommt. Sie können diese mit REST-API-Aufruf tun, müssen Sie nur die Parameter shallow=true

hier setzen die documentation

+0

Das ist sehr nützlich, es war nicht verfügbar im Juni 2013, Vielen Dank für das Teilen dieses Updates! –

+0

kann es mit Web API getan werden? – vinesh

+0

Ich glaube nicht, sie haben nur in diesem Oktober flach für REST eingeführt – webduvet

Verwandte Themen