Diese Beitragsserie ist auf NgateSystems.com indiziert. Dort finden Sie auch eine äußerst nützliche Stichwortsuchfunktion.
Letzte Bewertung: 24. November
Die umfangreiche Online-Dokumentation von Google für Firestore CRUD-Anweisungen (Erstellen, Lesen, Aktualisieren, Löschen) ist möglicherweise zu detailliert für den täglichen Gebrauch. Hier finden Sie Vorlagen für die wichtigsten Firestore-Funktionen. Ich schlage vor, dass Sie sie so ausschneiden und einfügen, wie sie sind, und dann das Wort „mein“ in Variablennamen durch eine passende Abkürzung des Sammlungsnamens ersetzen, auf den Sie abzielen. Beispielsweise könnten Verweise auf eine Sammlung namens „Lecture_events“ als „lecEvtsCollRef“ codiert werden.
Um ein Dokument zu erstellen, das ein myDocData-Objekt mit einer automatisch generierten ID:
enthält
let myDocData = .... create an object containing your data item properties ..... const myCollRef = collection(db, "myCollectionName"); const myDocRef = doc(myCollRef); await setDoc(myDocRef, myDocData);
Beachten Sie, dass die Google-Dokumentation zum „Hinzufügen von Daten“ verwirrenderweise auf eine addDoc-Funktion als Alternative zu setDoc verweist. Im Postskript unten finden Sie Ratschläge, warum setDocis bevorzugt wird.
Im obigen Codeausschnitt ist die myDocRef=-Anweisung der Punkt, an dem eine Auto-ID zugewiesen wird. Wenn Sie den zugewiesenen Wert suchen müssen, finden Sie ihn unter myDocRef.id. Weitere Informationen zu diesem Punkt finden Sie im Postscript unten.
So erstellen Sie ein Dokument mit einem Datenelement als Kennung:
let myDocData = .... create a data object ..... let myDocumentIdentifier = .... create your identifier .... const myDocRef = doc(db, "myCollectionName", myDocumentIdentifier) await setDoc(myDocRef, myDocData);
Um ein individuelles Dokument anhand seiner Dokument-ID abzurufen:
const myDocRef = doc(db, "myCollectionName", myDocId); const myDoc = await getDoc(myDocRef); if (myDoc.exists()) { console.log("Document data:", myDoc.data()); }
Um eine Auswahl von Dokumenten mit Auswahl- und Bestellkriterien abzurufen (Beispiel):
const myCollRef = collection(db, "myCollectionName"); const myQuery = query(myCollRef, where("myField1Name", "==", myField1Value), orderBy("myField2Name", "asc")); const mySnapshot = await getDocs(myQuery); mySnapshot.forEach((myDoc) => { console.log(myDoc.id, " => ", myDoc.data()); });
Innerhalb von forEach eines Snapshots sind die Daten für ein Dokument als myDoc.data() verfügbar, die docRef des Dokuments ist myDoc.ref und seine docId als myDoc.id. Wenn Sie nur daran interessiert sind, die Existenz von Dokumenten zu ermitteln, die den Auswahlkriterien entsprechen, besteht ein nützlicher Trick darin, nach mySnapshot.size ungleich Null zu suchen.
Wenn Sie auf einzelne Dokumente im Snapshot-Array verweisen möchten, finden Sie die Daten für den n-ten Eintrag unter mySnapshot.docs[n].data() und seine ID unter mySnapshot.docs[n]. id
Beachten Sie, dass Dokumente in aufsteigender Reihenfolge der docId zurückgegeben werden, wenn Sie kein orderBy-Feld angeben. Und wenn Sie mehr als ein Where-Feld einschließen, müssen Sie einen (zusammengesetzten) Index erstellen. Dabei hilft Ihnen das Browser-Inspektion-Tool. Sie müssen nur dem Link in der Fehlermeldung „index-needed“ folgen. Einzelne Felder werden automatisch in einer Firestore-Datenbank indiziert.
So rufen Sie alle Dokumente in einer Sammlung ab:
const myCollRef = collection(db, "myCollectionName"); const myQuery = query(myCollRef); const mySnapshot = await getDocs(myQuery); mySnapshot.forEach((myDoc) => { console.log(myDoc.id, " >= ", myDoc.data()); });
Firestore-Vergleichsoperatoren sind „==", „>" , „<“, „<=", „>=" und „!=" sowie einige interessante Array-Mitgliedschaftsoperatoren.
Um alle Dokumente in einer Hierarchie von Sammlungen abzurufen und dann etwas zu tun:
Sie müssen vorsichtig sein, wenn Sie eine bestimmte Aktion ausführen möchten, nachdem die Verarbeitung einer mehrstufigen Sammlungshierarchie abgeschlossen ist. Wenn Ihr Code viele verschachtelte foreach-Anweisungen enthält, von denen jede eine Wait-Anweisung enthält, können Sie sich nicht darauf verlassen, dass die einzelnen Waits Ihnen mitteilen, wann der gesamte Satz abgeschlossen ist. Jeder dieser einzelnen Warte belegt einen separaten Thread und diese kommunizieren nicht direkt miteinander in irgendeiner hilfreichen Weise.
Ein Ausweg aus diesem Problem besteht darin, für Ihre Snapshots die herkömmliche for-Schleife anstelle von forEachs zu verwenden. Hier ist ein Beispiel, bei dem alle Kinder in einer Untersammlung als Ziel ausgewählt werden, bevor eine Aktion ausgeführt wird
let myDocData = .... create an object containing your data item properties ..... const myCollRef = collection(db, "myCollectionName"); const myDocRef = doc(myCollRef); await setDoc(myDocRef, myDocData);
Hier können Sie sich darauf verlassen, dass Ihre Warten in strikter Reihenfolge ausgeführt werden, und wenn Sie das Ende der Schleife erreichen, wissen Sie, dass Sie Ihre abhängige Aktion sicher weiter ausführen können. Der dadurch verursachte Leistungseinbruch kann jedoch erheblich sein, weshalb Sie möglicherweise an der folgenden Vereinbarung interessiert sind:
Sie können die einzelnen Versprechen, die von den Waits in einer forEach-Schleife gestartet werden, in den Griff bekommen, indem Sie sie in einem Array speichern. Anschließend können Sie die Anweisung „await Promise.all“ auf dieses Array anwenden, um herauszufinden, wann alle Versprechen seiner Mitglieder erfüllt sind. Es ist unmöglich, hier eine einfache Vorlage bereitzustellen, die allen Umständen gerecht wird. Im Folgenden finden Sie jedoch eine „Skizze“, die die allgemeinen Prinzipien veranschaulicht.
Hier wird eine zweistufige Hierarchie mit zwei separaten Sammlungen (Eltern und Kinder) durch ein gemeinsames Feld „parentsId“ verknüpft. Die beiden Sammlungen werden in den Speicher eingelesen, um eine Analyse des Aggregats zu ermöglichen. Dies ist nur möglich, wenn alle Kinder gelesen wurden.
let myDocData = .... create a data object ..... let myDocumentIdentifier = .... create your identifier .... const myDocRef = doc(db, "myCollectionName", myDocumentIdentifier) await setDoc(myDocRef, myDocData);
Beispiel – um den Wert der myField-Eigenschaft im myDocData-Inhalt eines Dokuments zu ändern
const myDocRef = doc(db, "myCollectionName", myDocId); const myDoc = await getDoc(myDocRef); if (myDoc.exists()) { console.log("Document data:", myDoc.data()); }
Beispiel – Ersetzen des gesamten Inhalts des Dokuments myDocId durch ein neues Objekt, das nur eine myField-Eigenschaft enthält
const myCollRef = collection(db, "myCollectionName"); const myQuery = query(myCollRef, where("myField1Name", "==", myField1Value), orderBy("myField2Name", "asc")); const mySnapshot = await getDocs(myQuery); mySnapshot.forEach((myDoc) => { console.log(myDoc.id, " => ", myDoc.data()); });
Sie können Änderungen auf mehrere Felder gleichzeitig anwenden, indem Sie das Bit {myField: myFieldValue} in den obigen Beispielen durch ein Objekt ersetzen, das die Felder enthält, die Sie ändern möchten.
const myCollRef = collection(db, "myCollectionName"); const myQuery = query(myCollRef); const mySnapshot = await getDocs(myQuery); mySnapshot.forEach((myDoc) => { console.log(myDoc.id, " >= ", myDoc.data()); });
Innerhalb einer Transaktion bleiben die oben eingeführten Muster unverändert, die setDoc-Befehle werden jedoch wie folgt geändert:
Innerhalb von runTransaction(db, async (transaction) => { ... }).catch(); Funktion:
Wie oben erwähnt, stellt Google parallel zu setDoc() die Funktionen addDoc() und updateDoc() für die Dokumentenerstellung und -aktualisierung bereit. Dies erscheint jedoch unnötig verwirrend, wenn setDoc beide Operationen ausführen kann. Außerdem kann addDoc() bei Transaktionen nur zum Erstellen von Dokumenten mit Auto-IDs verwendet werden. In der Praxis scheint es einfacher zu sein, einfach setDoc überall zu verwenden.
Möglicherweise ist Ihnen aufgefallen, dass es beim Aufruf von doc(myCollRef), der eine Firestore-Dokumentkennung erstellt, keine Wartezeit gibt. Dies zeigt Ihnen, dass Firestore dies irgendwie schafft, ohne die Sammlung tatsächlich zu besuchen und zu sehen, was bereits verwendet wird. Wenn Sie neugierig sind, wie es das schafft, schauen Sie sich vielleicht die Diskussion bei StackOverflow an.
Daten zum Cloud Firestore hinzufügen: https://firebase.google.com/docs/firestore/manage-data/add-data
Daten mit Cloud Firestore lesen: https://firebase.google.com/docs/firestore/query-data/get-data
Daten aus Cloud Firestore löschen: https://firebase.google.com/docs/firestore/manage-data/delete-data
SDK-Dokumentation finden Sie unter:
Das obige ist der detaillierte Inhalt vonNgSysV: Firestore CRUD-Vorlagen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!