Ich versuche, eine Anwendung zu erstellen, mit der ich Daten in bestimmten Benutzerkonten abrufen / festlegen kann, und ich wurde von Firebase in Versuchung geführt.
Das Problem, das ich habe, ist, dass ich nicht weiß, wie ich auf bestimmte Benutzerdaten abzielen soll, wenn meine Struktur so aussieht:
online-b-cards
- users
- InnROTBVv6FznK81k3m
- email: "hello@hello"
- main: "Hello world this is a text"
- name: "Alex"
- phone: 12912912
Ich habe mich umgesehen und kann nichts darüber finden, wie ich auf einzelne Daten zugreifen kann, geschweige denn, wenn sie einen zufälligen Hash als ID erhalten.
Wie würde ich vorgehen, um einzelne Benutzerinformationen anhand ihres Namens abzurufen? Wenn es einen besseren Weg gibt, sag es mir bitte!
firebase
firebase-realtime-database
Richard Bamford
quelle
quelle
Antworten:
Bisher mussten Sie in Firebase Ihre eigenen Indizes erstellen oder alle Daten an einem Speicherort herunterladen, um Elemente zu finden und abzurufen, die mit einem untergeordneten Attribut übereinstimmen (z. B. alle Benutzer mit
name === "Alex"
).Im Oktober 2014 hat Firebase über die
orderByChild()
Methode neue Abfragefunktionen eingeführt, mit denen Sie diese Art von Abfrage schnell und effizient durchführen können. Siehe die aktualisierte Antwort unten.Beim Schreiben von Daten in Firebase stehen Ihnen verschiedene Optionen zur Verfügung, die unterschiedliche Anwendungsfälle widerspiegeln. Auf hoher Ebene ist Firebase ein NoSQL-Datenspeicher mit Baumstruktur und bietet einige einfache Grundelemente für die Verwaltung von Datenlisten:
Schreiben Sie mit einem eindeutigen, bekannten Schlüssel an Firebase:
An Listen mit einem automatisch generierten Schlüssel anhängen , der automatisch nach der geschriebenen Zeit sortiert wird:
Achten Sie auf Änderungen an Daten über den eindeutigen, bekannten Pfad:
Filtern oder bestellen Sie Daten in einer Liste nach Schlüssel- oder Attributwert :
Mit dem Zusatz von
orderByChild()
müssen Sie keinen eigenen Index mehr für Abfragen zu untergeordneten Attributen erstellen! So rufen Sie beispielsweise alle Benutzer mit dem Namen "Alex" ab:Ingenieur bei Firebase hier. Beim Schreiben von Daten in Firebase stehen Ihnen verschiedene Optionen zur Verfügung, die unterschiedliche Anwendungsfälle widerspiegeln. Da Firebase ein NoSQL-Datenspeicher ist, müssen Sie entweder Ihre Datenobjekte mit eindeutigen Schlüsseln speichern, damit Sie direkt auf dieses Element zugreifen können, oder alle Daten an einem bestimmten Ort laden und jedes Element durchlaufen, um den gewünschten Knoten zu finden . Weitere Informationen finden Sie unter Schreiben von Daten und Verwalten von Listen .
Wenn Sie Daten in Firebase schreiben, können Sie entweder
set
Daten unter Verwendung eines eindeutigen, definierten Pfads (dha/b/c
) oderpush
Daten in eine Liste eingeben, wodurch eine eindeutige ID (dha/b/<unique-id>
) generiert wird und Sie die Elemente in dieser Liste nach Zeit sortieren und abfragen können . Die oben angezeigte eindeutige ID wird durch Aufrufen generiert,push
um ein Element an die Liste unter anzuhängenonline-b-cards/users
.Anstatt
push
hier zu verwenden, würde ich empfehlenset
, die Daten für jeden Benutzer mit einem eindeutigen Schlüssel wie der E-Mail-Adresse des Benutzers zu verwenden und zu speichern. Anschließend können Sie direkt auf die Benutzerdaten zugreifen, indem Sieonline-b-cards/users/<email>
über das Firebase JS SDK zu navigieren . Beispielsweise:Da Firebase bestimmte Zeichen in Referenzen nicht zulässt (siehe Erstellen von Referenzen ), entfernen wir diese
.
und ersetzen sie durch a,
im obigen Code.quelle
orderByChild
Funktion zu verweisen . Da diese Antwort häufig als relevante / verwandte Antwort angezeigt wird, müssen sich die Benutzer diese unbedingt ansehen und sollten sich der neuen Abfragefunktionen bewusst sein.Sie können die Details mit dem folgenden Code abrufen.
quelle
Ich denke, der beste Ansatz besteht darin, die IDs der Benutzer basierend auf dem von der Firebase bereitgestellten Auth-Objekt zu definieren. Wenn ich meine Benutzer erstelle, mache ich Folgendes:
Diese ID stammt von:
Die Firebase-Authentifizierungsdienste stellen immer sicher, dass unter allen Anbietern eine eindeutige ID für uid festgelegt wird. Auf diese Weise haben Sie immer die auth.uid und können leicht auf den gewünschten Benutzer zugreifen, um sie zu aktualisieren, wie zum Beispiel:
quelle
Dies war eine Umschreibung eines Beitrags, der mir beim Zugriff auf die automatisch generierte eindeutige ID geholfen hat. Greifen Sie mithilfe der impliziten AngularFire-Synchronisierung innerhalb von ng-repeat auf eindeutige Firebase-IDs zu
Danke, bennlich (Quelle):
Firebase verhält sich wie ein normales Javascript-Objekt. Vielleicht bringt Sie das folgende Beispiel auf den richtigen Weg.
Bearbeiten: Nicht 100% sicher über Ihr gewünschtes Ergebnis, aber hier ist ein bisschen mehr, das einen Aha-Moment auslösen könnte. Klicken Sie auf den Schlüssel, auf den Sie zugreifen möchten, direkt in Ihrem Firebase-Dashboard. Von dort aus können Sie etwas verwenden wie:
quelle
So greifen Sie auf die automatisch generierten eindeutigen Schlüssel in Firebase zu: Datenstruktur : - OnlineBcards - UniqueKey
quelle
Der einfachste Weg ist, die Verwendung von zu beenden
.push(){}
Funktion, die diesen zufälligen Schlüssel erzeugt. Verwenden
.update(){}
Sie stattdessen die Funktion, mit der Sie den Namen des Kindes angeben können, anstatt den Zufallsschlüssel zu haben.quelle
Daten abrufen:
In Ihrer Datenbank verwenden Sie eine zufällige ID, die mit der generiert
push()
wird. Wenn Sie also die Daten abrufen möchten, gehen Sie wie folgt vor:Verwenden von Firebase in der Android App:
Verwenden von Firebase in Javascript:
Hier haben Sie den Schnappschuss (Speicherort der Daten),
users
dann durchlaufen Sie alle zufälligen IDs und rufen die Namen ab.Abrufen von Daten für einen bestimmten Benutzer:
Wenn Sie nun Informationen nur für einen bestimmten Benutzer abrufen möchten, müssen Sie eine Abfrage hinzufügen:
Verwenden von Firebase in der Android App:
Verwenden von Firebase mit Javascript
Das Verwenden
orderByChild("name").equalTo("Alex")
ist wie gesagtwhere name="Alex"
, es werden die Daten abgerufen, die sich auf Alex beziehen.Bester Weg:
Das Beste ist, die Firebase-Authentifizierung zu verwenden, um für jeden Benutzer eine eindeutige ID zu generieren und diese anstelle einer zufälligen ID zu verwenden
push()
. Auf diese Weise müssen Sie nicht alle Benutzer durchlaufen, da Sie über die ID verfügen und problemlos darauf zugreifen können.Zuerst muss der Benutzer angemeldet sein, dann können Sie die eindeutige ID abrufen und einen Listener anhängen, um die anderen Daten dieses Benutzers abzurufen:
Verwenden von Firebase mit Android:
Verwenden von Firebase mit Javascript:
quelle
Der einfachste und bessere Weg, Ihrer Datenbank je nach authentifiziertem Benutzer eine eindeutige ID hinzuzufügen, ist folgende:
Die UId ist eine eindeutige ID für eine bestimmte authentifizierte E-Mail / einen bestimmten authentifizierten Benutzer
quelle