Datenmodell
Firestore ist eine dokumentenbasierte NoSQL-Datenbank. Im Gegensatz zu einer SQL-Datenbank gibt es hier keine Tabellen oder Zeilen. Stattdessen speichern Sie Daten in Dokumenten, die in Sammlungen organisiert sind.
Jedes Dokument enthält eine Reihe von Schlüssel/Wert-Paaren. Firestore ist für das Speichern großer Sammlungen kleiner Dokumente optimiert.
Alle Dokumente müssen in Sammlungen gespeichert werden. Dokumente können sogenannte untergeordnete Sammlungen, auch Untersammlungen genannt, und verschachtelte Objekte enthalten, die wiederum aus einfachen Feldern wie Strings oder aus komplexen Objekten wie Listen bestehen können.
Sammlungen und Dokumente werden implizit in Firestore erstellt. Sie müssen einem Dokument innerhalb einer Sammlung einfach Daten zuordnen. Wenn die Sammlung oder das Dokument nicht vorhanden ist, wird sie/es von Firestore erstellt.
Dokumente
In Firestore ist die grundlegende Speichereinheit das Dokument. Ein Dokument ist ein einfacher Datensatz, der Felder enthält, denen Werten zugeordnet sind. Jedes Dokument wird durch einen Namen identifiziert.
Ein Dokument, das den Nutzer alovelace
repräsentiert, könnte etwa so aussehen:
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
Komplexe, verschachtelte Objekte in einem Dokument werden als Maps bezeichnet. Sie können z. B. den Nutzernamen aus dem obigen Beispiel mit einer Map wie dieser strukturieren:
alovelace
name :
first : "Ada"
last : "Lovelace"
born : 1815
Ihnen ist vielleicht schon aufgefallen, dass die Dokumente JSON sehr ähneln. Im Prinzip sind es JSON-Dokumente. Es gibt allerdings doch einige Unterschiede – Dokumente unterstützen beispielsweise zusätzliche Datentypen und sind auf 1 MB beschränkt –, aber im Allgemeinen können Sie Dokumente wie einfache JSON-Datensätze behandeln.
Sammlungen
Dokumente befinden sich in Sammlungen. Dies sind lediglich Container für Dokumente. Sie könnten beispielsweise die Sammlung users
für Ihre verschiedenen Nutzer haben, die jeweils durch ein Dokument repräsentiert werden:
users
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
aturing
first : "Alan"
last : "Turing"
born : 1912
Firestore ist schemalos. Sie können also frei entscheiden, welche Felder Sie in die einzelnen Dokumente einfügen und welche Datentypen Sie in diesen Feldern speichern. Dokumente in einer Sammlung können alle unterschiedliche Felder enthalten und in diesen Feldern können unterschiedliche Datentypen gespeichert werden. Es empfiehlt sich jedoch, dieselben Felder und Datentypen für mehrere Dokumente zu verwenden, denn so können Sie die Dokumente leichter abfragen.
Eine Sammlung enthält nur Dokumente. Sie darf weder direkt Standardfelder mit Werten noch andere Sammlungen enthalten. Unter Hierarchische Daten wird erläutert, wie komplexere Daten in Firestore strukturiert werden.
Die Namen der Dokumente in einer Sammlung müssen eindeutig sein. Sie können dafür eigene Schlüssel wie z. B. Nutzer-IDs verwenden oder Zufalls-IDs von Firestore automatisch erstellen lassen.
Sie müssen Sammlungen weder selbst erstellen noch löschen. Nachdem Sie das erste Dokument in einer Sammlung erstellt haben, ist die Sammlung vorhanden. Wenn Sie alle Dokumente in einer Sammlung löschen, ist sie nicht mehr vorhanden.
Verweise
Jedes Dokument in Firestore wird eindeutig durch seinen Speicherort in der Datenbank identifiziert. Im vorherigen Beispiel war ein Dokument alovelace
in der Sammlung users
enthalten. Wenn Sie in Ihrem Code auf diesen Standort verweisen möchten, können Sie eine entsprechende Referenz erstellen.
Webversion 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Webversion 8
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Swift
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
FIRDocumentReference *alovelaceDocumentRef = [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];
Kotlin
Android
val alovelaceDocumentRef = db.collection("users").document("alovelace")
Java
Android
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
Dart
final alovelaceDocumentRef = db.collection("users").doc("alovelace");
Java
Python
Python
(Async)
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
Go
PHP
PHP
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Firestore zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Einheit
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Firestore zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Ruby
Eine Referenz ist ein einfaches Objekt, das nur auf einen Speicherort in einer Datenbank verweist. Sie können eine Referenz unabhängig davon erstellen, ob dort Daten vorhanden sind oder nicht. Beim Erstellen einer Referenz werden zudem keine Netzwerkvorgänge durchgeführt.
Auch auf Sammlungen können Sie Referenzen erstellen:
Webversion 9
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Webversion 8
var usersCollectionRef = db.collection('users');
Swift
let usersCollectionRef = db.collection("users")
Objective-C
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
Kotlin
Android
val usersCollectionRef = db.collection("users")
Java
Android
CollectionReference usersCollectionRef = db.collection("users");
Dart
final usersCollectionRef = db.collection("users");
Java
Python
Python
(Async)
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
Go
PHP
PHP
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Firestore zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Einheit
CollectionReference collectionRef = db.Collection("users");
C#
C#
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Firestore zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Ruby
Einfacherweise können Sie auch Referenzen erstellen, wenn Sie den Pfad zu einem Dokument oder einer Sammlung als String angeben. Dabei müssen die Pfadkomponenten durch einen Schrägstrich (/
) getrennt sein. So erstellen Sie beispielsweise eine Referenz auf das alovelace
-Dokument:
Webversion 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Webversion 8
var alovelaceDocumentRef = db.doc('users/alovelace');
Swift
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
FIRDocumentReference *aLovelaceDocumentReference = [self.db documentWithPath:@"users/alovelace"];
Kotlin
Android
val alovelaceDocumentRef = db.document("users/alovelace")
Java
Android
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
Dart
final aLovelaceDocRef = db.doc("users/alovelace");
Java
Python
Python
(Async)
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
Go
PHP
PHP
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Firestore zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Einheit
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Firestore zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Ruby
Hierarchische Daten
Wie hierarchische Datenstrukturen in Firestore funktionieren, lässt sich gut an einer Beispiel-Chat-Anwendung mit Nachrichten und Chatrooms veranschaulichen.
Sie können eine Sammlung mit dem Namen rooms
erstellen und darin verschiedene Chatrooms speichern:
Räume
roomA
name : "my chat room"
roomB
...
Nachdem Sie diese Chatrooms erstellt haben, können Sie entscheiden, wie Sie die Nachrichten speichern wollen. Sie sollten sie aber nicht im Dokument des Chatrooms speichern. Dokumente in Firestore müssen einfach sein, ein Chatroom kann jedoch eine große Anzahl an Nachrichten enthalten. Sie haben aber die Möglichkeit, im Dokument des Chatrooms zusätzliche Sammlungen als Untersammlungen zu erstellen.
Untersammlungen
Die beste Möglichkeit zum Speichern von Nachrichten in diesem Szenario ist die Verwendung von Untersammlungen. Eine Untersammlung ist eine Sammlung, die einem bestimmten Dokument zugeordnet ist.
Für jedes Chatroom-Dokument in der Sammlung rooms
können Sie eine Untersammlung mit dem Namen messages
erstellen:
Räume
roomA
name : "my chat room"
messages
message1
from : "alex"
msg : "Hello World!"
message2
...
roomB
...
In diesem Beispiel würden Sie eine Referenz auf eine Nachricht in der Untersammlung mit dem folgenden Code erstellen:
Webversion 9
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Webversion 8
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
Swift
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Objective-C
FIRDocumentReference *messageRef = [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"] collectionWithPath:@"messages"] documentWithPath:@"message1"];
Kotlin
Android
val messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Java
Android
DocumentReference messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1");
Dart
final messageRef = db .collection("rooms") .doc("roomA") .collection("messages") .doc("message1");
Java
Python
Python
(Async)
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
Go
PHP
PHP
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Firestore zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Einheit
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Firestore zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Ruby
Beachten Sie das abwechselnde Muster von Sammlungen und Dokumenten. Die Sammlungen und Dokumente müssen immer diesem Muster folgen. Sie können nicht auf eine Sammlung in einer Sammlung oder ein Dokument in einem Dokument verweisen.
Mithilfe von Untersammlungen können Sie Daten hierarchisch strukturieren, um einfacher auf Daten zugreifen zu können. Wenn Sie alle Nachrichten roomA
abrufen möchten, können Sie eine Sammlungsreferenz auf die Untersammlung messages
erstellen und dann damit wie mit jeder anderen Sammlungsreferenz interagieren.
Dokumente in Untersammlungen können auch Untersammlungen enthalten, sodass Sie die Daten weiter verschachteln können. Daten können auf bis zu 100 Ebenen verschachtelt werden.