Heim > Web-Frontend > js-Tutorial > NgSysV: Firestore CRUD-Vorlagen

NgSysV: Firestore CRUD-Vorlagen

Linda Hamilton
Freigeben: 2024-12-04 05:31:15
Original
937 Leute haben es durchsucht

NgSysV: Firestore CRUD templates

Diese Beitragsserie ist auf NgateSystems.com indiziert. Dort finden Sie auch eine äußerst nützliche Stichwortsuchfunktion.

Letzte Bewertung: 24. November

Einführung

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.

Dokumente erstellen

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);
Nach dem Login kopieren
Nach dem Login kopieren

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);
Nach dem Login kopieren
Nach dem Login kopieren

Dokumente lesen

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());
} 
Nach dem Login kopieren
Nach dem Login kopieren

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());
});
Nach dem Login kopieren
Nach dem Login kopieren

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());
});
Nach dem Login kopieren
Nach dem Login kopieren

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);
Nach dem Login kopieren
Nach dem Login kopieren

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);
Nach dem Login kopieren
Nach dem Login kopieren

Ein Dokument aktualisieren

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());
} 
Nach dem Login kopieren
Nach dem Login kopieren

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());
});
Nach dem Login kopieren
Nach dem Login kopieren

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.

Ein Dokument löschen

const myCollRef = collection(db, "myCollectionName");
const myQuery = query(myCollRef);
const mySnapshot = await getDocs(myQuery);
mySnapshot.forEach((myDoc) => {
  console.log(myDoc.id, " >= ", myDoc.data());
});
Nach dem Login kopieren
Nach dem Login kopieren

CRUD-Operationen innerhalb von Transaktionen

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:

  • getDoc wird durch transaktion.get() ersetzt
  • setDoc wird durch transaktion.set() ersetzt
  • deleteDoc wird durch transaktion.delete() ersetzt

Postskriptum

  1. 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.

  2. 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.

Referenzen zur Google-Dokumentation

  • 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:

  • https://firebase.google.com/docs/reference/js/firestore_ und
  • https://firebase.google.com/docs/reference/js/firestore_.transaction

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage