Cloud Firestore ist eine dokumentenorientierte NoSQL-Datenbank. Im Gegensatz zu einer SQL-Datenbank gibt es 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. Cloud Firestore ist für die Speicherung großer Sammlungen kleiner Dokumente optimiert.
Alle Dokumente müssen in Sammlungen gespeichert werden. Dokumente können Untersammlungen und verschachtelte Objekte enthalten, die beide primitive Felder wie Zeichenfolgen oder komplexe Objekte wie Listen enthalten können.
Sammlungen und Dokumente werden implizit im Cloud Firestore erstellt. Weisen Sie einfach einem Dokument innerhalb einer Sammlung Daten zu. Wenn die Sammlung oder das Dokument nicht vorhanden ist, wird es vom Cloud Firestore erstellt.
Unterlagen
Im Cloud Firestore ist die Speichereinheit das Dokument. Ein Dokument ist ein kompakter Datensatz, der Felder enthält, die Werten zugeordnet sind. Jedes Dokument ist durch einen Namen gekennzeichnet.
Ein Dokument, das einen Benutzer alovelace
könnte folgendermaßen aussehen:
first : "Ada"
last : "Lovelace"
born : 1815
Komplexe, verschachtelte Objekte in einem Dokument werden als Karten bezeichnet. Sie können beispielsweise den Namen des Benutzers aus dem obigen Beispiel mit einer Karte wie folgt strukturieren:
name :
first : "Ada"
last : "Lovelace"
born : 1815
Möglicherweise stellen Sie fest, dass Dokumente JSON sehr ähnlich sehen. In der Tat sind sie im Grunde. Es gibt einige Unterschiede (z. B. unterstützen Dokumente zusätzliche Datentypen und sind auf 1 MB begrenzt). Im Allgemeinen können Sie Dokumente jedoch als einfache JSON-Datensätze behandeln.
Sammlungen
Dokumente leben in Sammlungen, die einfach Container für Dokumente sind. Beispielsweise könnten Sie eine users
, die Ihre verschiedenen Benutzer enthält, die jeweils durch ein Dokument dargestellt werden:
first : "Ada"
last : "Lovelace"
born : 1815
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore ist schemenlos, sodass Sie völlig frei entscheiden können, welche Felder Sie in jedes Dokument einfügen und welche Datentypen Sie in diesen Feldern speichern. Dokumente innerhalb derselben Sammlung können alle unterschiedliche Felder enthalten oder unterschiedliche Datentypen in diesen Feldern speichern. Es ist jedoch eine gute Idee, dieselben Felder und Datentypen für mehrere Dokumente zu verwenden, damit Sie die Dokumente einfacher abfragen können.
Eine Sammlung enthält Dokumente und sonst nichts. Es kann keine Rohfelder mit Werten direkt enthalten und es kann keine anderen Sammlungen enthalten. (Unter Hierarchische Daten finden Sie eine Erläuterung zum Strukturieren komplexerer Daten im Cloud Firestore.)
Die Namen von Dokumenten innerhalb einer Sammlung sind eindeutig. Sie können Ihre eigenen Schlüssel wie Benutzer-IDs bereitstellen oder Cloud Firestore automatisch zufällige IDs für Sie erstellen lassen.
Sie müssen keine Sammlungen "erstellen" oder "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 diese nicht mehr vorhanden.
Verweise
Jedes Dokument im Cloud Firestore wird durch seinen Speicherort in der Datenbank eindeutig identifiziert. Das vorherige Beispiel zeigte ein Dokument alovelace
innerhalb der Sammlung users
. Um in Ihrem Code auf diesen Speicherort zu verweisen, können Sie einen Verweis darauf erstellen.
Web v8
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Web v9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Schnell
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Ziel c
FIRDocumentReference *alovelaceDocumentRef = [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];
Java
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
Kotlin + KTX
val alovelaceDocumentRef = db.collection("users").document("alovelace")
Java
// Reference to a document with id "alovelace" in the collection "users" DocumentReference document = db.collection("users").document("alovelace");
Python
a_lovelace_ref = db.collection(u'users').document(u'alovelace')
C ++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
Gehen
alovelaceRef := client.Collection("users").Doc("alovelace")
PHP
$document = $db->collection('users')->document('lovelace');
Einheit
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C #
DocumentReference documentRef = db.Collection("users").Document("alovelace");
Rubin
document_ref = firestore.col("users").doc("alovelace")
Eine Referenz ist ein leichtes Objekt, das nur auf einen Speicherort in Ihrer Datenbank verweist. Sie können eine Referenz erstellen, unabhängig davon, ob dort Daten vorhanden sind, und beim Erstellen einer Referenz werden keine Netzwerkvorgänge ausgeführt.
Sie können auch Verweise auf Sammlungen erstellen:
Web v8
var usersCollectionRef = db.collection('users');
Web v9
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Schnell
let usersCollectionRef = db.collection("users")
Ziel c
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
Java
CollectionReference usersCollectionRef = db.collection("users");
Kotlin + KTX
val usersCollectionRef = db.collection("users")
Java
// Reference to the collection "users" CollectionReference collection = db.collection("users");
Python
users_ref = db.collection(u'users')
C ++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Gehen
usersRef := client.Collection("users")
PHP
$collection = $db->collection('users');
Einheit
CollectionReference collectionRef = db.Collection("users");
C #
CollectionReference collectionRef = db.Collection("users");
Rubin
collection_ref = firestore.col "users"
Der Einfachheit halber können Sie auch Referenzen erstellen, indem Sie den Pfad zu einem Dokument oder einer Sammlung als Zeichenfolge angeben, wobei die Pfadkomponenten durch einen Schrägstrich ( /
) getrennt sind. So erstellen Sie beispielsweise einen Verweis auf das alovelace
Dokument:
Web v8
var alovelaceDocumentRef = db.doc('users/alovelace');
Web v9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Schnell
let aLovelaceDocumentReference = db.document("users/alovelace")
Ziel c
FIRDocumentReference *aLovelaceDocumentReference = [self.db documentWithPath:@"users/alovelace"];
Java
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
Kotlin + KTX
val alovelaceDocumentRef = db.document("users/alovelace")
Java
// Reference to a document with id "alovelace" in the collection "users" DocumentReference document = db.document("users/alovelace");
Python
a_lovelace_ref = db.document(u'users/alovelace')
C ++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Gehen
alovelaceRef := client.Doc("users/alovelace")
PHP
$document = $db->document('users/lovelace');
Einheit
DocumentReference documentRef = db.Document("users/alovelace");
C #
DocumentReference documentRef = db.Document("users/alovelace");
Rubin
document_path_ref = firestore.doc "users/alovelace"
Hierarchische Daten
Betrachten Sie eine Beispiel-Chat-App mit Nachrichten und Chatrooms, um zu verstehen, wie hierarchische Datenstrukturen im Cloud Firestore funktionieren.
Sie können eine Sammlung mit dem Namen " rooms
erstellen, um verschiedene Chatrooms zu speichern:
name : "my chat room"
...
Nachdem Sie Chatrooms haben, entscheiden Sie, wie Ihre Nachrichten gespeichert werden sollen. Möglicherweise möchten Sie sie nicht im Dokument des Chatrooms speichern. Dokumente im Cloud Firestore sollten leichtgewichtig sein und ein Chatroom kann eine große Anzahl von Nachrichten enthalten. Sie können jedoch zusätzliche Sammlungen im Dokument Ihres Chatrooms als Untersammlungen erstellen.
Untersammlungen
Der beste Weg, um Nachrichten in diesem Szenario zu speichern, ist die Verwendung von Untersammlungen. Eine Untersammlung ist eine Sammlung, die einem bestimmten Dokument zugeordnet ist.
Sie können eine Untersammlung genannt erstellen messages
für jeden Raum - Dokument in Ihrem rooms
Sammlung:
name : "my chat room"
from : "alex"
msg : "Hello World!"
...
...
In diesem Beispiel würden Sie einen Verweis auf eine Nachricht in der Untersammlung mit dem folgenden Code erstellen:
Web v8
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
Web v9
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Schnell
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Ziel c
FIRDocumentReference *messageRef = [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"] collectionWithPath:@"messages"] documentWithPath:@"message1"];
Java
DocumentReference messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1");
Kotlin + KTX
val messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Java
// Reference to a document in subcollection "messages" DocumentReference document = db.collection("rooms").document("roomA").collection("messages").document("message1");
Python
room_a_ref = db.collection(u'rooms').document(u'roomA') message_ref = room_a_ref.collection(u'messages').document(u'message1')
C ++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
const messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
Gehen
messageRef := client.Collection("rooms").Doc("roomA"). Collection("messages").Doc("message1")
PHP
$document = $db ->collection('rooms') ->document('roomA') ->collection('messages') ->document('message1');
Einheit
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C #
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
Rubin
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")
Beachten Sie das abwechselnde Muster von Sammlungen und Dokumenten. Ihre 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.
Mit Untersammlungen können Sie Daten hierarchisch strukturieren, um den Zugriff auf Daten zu erleichtern. Um alle Nachrichten in erhalten roomA
, können Sie eine Sammlung Verweis auf die Untersammlung erstellen messages
und mit ihm interagieren , wie Sie jede andere Sammlung Referenz.
Dokumente in Untersammlungen können auch Untersammlungen enthalten, sodass Sie Daten weiter verschachteln können. Sie können Daten mit einer Tiefe von bis zu 100 Ebenen verschachteln.