Die Firebase-API können Sie nur Kinder eine Ebene tiefer (oder with a known path) mit seinem orderByChild
und equalTo
Methoden filtern.
So ohne Änderung/Ihre aktuelle Datenstruktur erweitert, die nur die Möglichkeit lässt alle Daten abrufen und filtern es clientseitige:
var ref = firebase.database().ref('Users');
ref.once('value', function(snapshot) {
snapshot.forEach(function(userSnapshot) {
var blogs = userSnapshot.val().blogs;
var daBlog = blogs['efg'];
});
});
Das ist natürlich sehr ineffizient und nicht skaliert, wenn Sie haben eine nicht-triviale Anzahl von Benutzern/Blogs.
So ist die gemeinsame Lösung für das heißt zu einem sogenannten Index zu Ihrem Baum, der den Schlüssel zuordnet, die Sie auf den Weg suchen, in dem sie sich befindet: Zugriff Sie
{Blogs:
"abc": "1234567",
"zyx": "1234567",
"efg": "7654321",
"hij": "7654321"
}
Dann können schnell den Blog Verwendung:
var ref = firebase.database().ref();
ref.child('Blogs/efg').once('value', function(snapshot) {
var user = snapshot.val();
ref.child('Blogs/'+user+'/blogs').on('value, function(blogSnapshot) {
var daBlog = blogSnapshot.val();
});
});
Sie auch zu überdenken möchten, wenn Sie Ihre Daten neu strukturieren können, um besser Ihre Use-case und Firebase seiner Grenzen zu passen. Sie haben eine gute Dokumentation über die Strukturierung Ihrer Daten, aber die wichtigste für Leute, die neu in NoSQL/hierarchischen Datenbanken sind, scheint "avoid building nests" zu sein.
Siehe auch http://stackoverflow.com/questions/24869180/query-hierarchical-data-structure-in-firebase – Kato
Es gibt wirklich keinen Grund, Blogs als Teil der Benutzerdatensätze zu haben. Sie sind kein logisches "Attribut" eines Benutzers, sie sind eine separate Entität mit eigenen Datenstrukturen, Zweck und Lese-/Schreibszenarien. Ich würde damit beginnen, diese zu spalten (wie Frank erwähnte) und die Dinge einfach und direkt zu machen. – Kato