2017-07-21 6 views
0

Ich bin nicht in der Lage, ein Firebase-Objekt zu finden, indem Sie den spezifischen Child-Schlüssel angeben und nur wenn ich den gesamten Pfad zum Objekt angeben. Warum ist das?Kann Firebase-Kind nicht mit Schlüssel finden

Dies funktioniert

ref.child(`users/${user.uid}/watchlist/${key}`) 
    .once('value') 
    .then(function(snapshot) { 
    console.log(snapshot.val()); 
}); 

Diese nicht

ref.child(key) 
    .once('value') 
    .then(function(snapshot) { 
    console.log(snapshot.val()); 
}); 

Meine Feuerbasis Verbindung

export const ref = firebase.database().ref() 

Antwort

1

Ich bin nicht sicher funktioniert wie sonst würden erwarten, dass Sie es arbeiten? child() is not a "search" function, es werden nur direkte untergeordnete Elemente der von Ihnen angegebenen Referenz- oder untergeordneten Pfade angezeigt. Es durchsucht verschachtelte Pfade nicht nach der Firebase-Struktur, die nach dem angegebenen Schlüssel "sucht". Das wäre unglaublich ineffizient. Und selbst wenn es tat das tun würde, was würde passieren, wenn es mehrere übereinstimmende Schlüssel gäbe? Würde es alle zurückgeben? Was wäre, wenn sie in verschiedenen Tiefen wären? Usw.

Die Firebase-Echtzeitdatenbank ist im Grunde ein großer JSON-ähnlicher Datenbaum. Die einzige Möglichkeit, zu den gewünschten Daten zu gelangen, ist der gesamte Pfad zu diesen Daten. Sonst gäbe es überhaupt keine Struktur.

Ich nehme an, wenn Sie wollten, können Sie laden Sie die gesamte Firebase Datenstruktur und dann schreiben Sie Ihre eigene Funktion zum Auffinden beliebiger Schlüssel, egal wo sie in der Struktur waren. Aber das hat die gleichen problematischen Ineffizienzen, als wenn es in die Firebase-Bibliothek selbst eingebaut wäre - was nicht der Fall ist.

Vielleicht wird dies besser veranschaulichen, wie child() funktioniert. Dies:

ref.child(`users/${user.uid}/watchlist/${key}`); 

ist im Grunde das gleiche wie folgt aus:

ref.child("users").child(user.uid).child("watchlist").child(key); 

Obwohl ich, dass das zweite Verfahren vermuten ist weniger effizient, ich weiß es nicht genau.

+0

Große Antwort Jered. Geringfügige Klärung: Mit Firebase-Abfragen können Sie Pfade mit einem einzelnen dynamischen Teil durchsuchen. Siehe auch meine Antwort hier: https://StackOverflow.com/Questions/27207059/FireBase-Query-Doubles-Nested –

+0

Wenn UIDs eindeutig sind, würde die Angabe bestimmter Kinder in der DB funktionieren, aber ich weiß nicht, ob das effizient wäre aber Effizienz ist nicht der Punkt meiner Sorge. –