Cloud Firestore-Datenmodell

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 aufbewahrt 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. Ordnen Sie Daten einfach einem Dokument innerhalb einer Sammlung zu. Wenn die Sammlung oder das Dokument nicht vorhanden ist, wird es von Cloud Firestore erstellt.

Unterlagen

In Cloud Firestore ist die Speichereinheit das Dokument. Ein Dokument ist ein kompakter Datensatz, der Felder enthält, die Werten zugeordnet sind. Jedes Dokument wird durch einen Namen identifiziert.

Ein Dokument, das einen Benutzer alovelace darstellt, könnte wie folgt aussehen:

  • alovelace

    first : "Ada"
    last : "Lovelace"
    born : 1815

Komplexe, verschachtelte Objekte in einem Dokument werden als Karten bezeichnet. Sie könnten beispielsweise den Namen des Benutzers aus dem obigen Beispiel mit einer Karte wie folgt strukturieren:

  • alovelace

    name :
    first : "Ada"
    last : "Lovelace"
    born : 1815

Möglicherweise stellen Sie fest, dass Dokumente JSON sehr ähneln. Tatsächlich sind sie es im Grunde. Es gibt einige Unterschiede (z. B. unterstützen Dokumente zusätzliche Datentypen und sind in der Größe auf 1 MB begrenzt), aber im Allgemeinen können Sie Dokumente als leichtgewichtige JSON-Datensätze behandeln.

Sammlungen

Dokumente befinden sich in Sammlungen, die lediglich Container für Dokumente sind. Sie könnten beispielsweise eine users haben, die Ihre verschiedenen Benutzer enthält, die jeweils durch ein Dokument dargestellt werden:

  • Benutzer

    • alovelace

      first : "Ada"
      last : "Lovelace"
      born : 1815

    • first : "Alan"
      last : "Turing"
      born : 1912

Cloud Firestore ist schemalos, 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 empfiehlt sich jedoch, in mehreren Dokumenten dieselben Felder und Datentypen 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. (Eine Erläuterung zur Strukturierung komplexerer Daten in Cloud Firestore finden Sie unter Hierarchische Daten .)

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 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 in Cloud Firestore wird durch seinen Speicherort in der Datenbank eindeutig identifiziert. Das vorherige Beispiel zeigte ein Dokument alovelace innerhalb der Sammlung users befindet. Um auf diese Stelle in Ihrem Code zu verweisen, können Sie einen Verweis darauf erstellen.

Web modular API

import { doc } from "firebase/firestore";

const alovelaceDocumentRef = doc(db, 'users', 'alovelace');

Web namespaced API

var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Schnell
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Ziel c
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
FIRDocumentReference *alovelaceDocumentRef =
    [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];

Kotlin+KTX

val alovelaceDocumentRef = db.collection("users").document("alovelace")

Java

DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");

Dart

final alovelaceDocumentRef = db.collection("users").doc("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("users").document("alovelace")

Python

a_lovelace_ref = db.collection("users").document("alovelace")
C++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
Node.js
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
Gehen

import (
	"cloud.google.com/go/firestore"
)

func createDocReference(client *firestore.Client) {

	alovelaceRef := client.Collection("users").Doc("alovelace")

	_ = alovelaceRef
}
PHP

PHP

Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

$document = $db->collection('samples/php/users')->document('alovelace');
Einheit
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#

C#

Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

DocumentReference documentRef = db.Collection("users").Document("alovelace");
Rubin
document_ref = firestore.col("users").doc("alovelace")

Eine Referenz ist ein leichtes Objekt, das lediglich auf einen Ort in Ihrer Datenbank verweist. Sie können eine Referenz unabhängig davon erstellen, ob dort Daten vorhanden sind oder nicht. Durch die Erstellung einer Referenz werden keine Netzwerkvorgänge ausgeführt.

Sie können auch Verweise auf Sammlungen erstellen:

Web modular API

import { collection } from "firebase/firestore";

const usersCollectionRef = collection(db, 'users');

Web namespaced API

var usersCollectionRef = db.collection('users');
Schnell
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
let usersCollectionRef = db.collection("users")
Ziel c
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];

Kotlin+KTX

val usersCollectionRef = db.collection("users")

Java

CollectionReference usersCollectionRef = db.collection("users");

Dart

final usersCollectionRef = db.collection("users");
Java
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Python
users_ref = db.collection("users")

Python

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Gehen

import (
	"cloud.google.com/go/firestore"
)

func createCollectionReference(client *firestore.Client) {
	usersRef := client.Collection("users")

	_ = usersRef
}
PHP

PHP

Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

$collection = $db->collection('samples/php/users');
Einheit
CollectionReference collectionRef = db.Collection("users");
C#

C#

Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

CollectionReference collectionRef = db.Collection("users");
Rubin
collection_ref = firestore.col "users"

Der Einfachheit halber können Sie Referenzen auch 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 modular API

import { doc } from "firebase/firestore"; 

const alovelaceDocumentRef = doc(db, 'users/alovelace');

Web namespaced API

var alovelaceDocumentRef = db.doc('users/alovelace');
Schnell
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
let aLovelaceDocumentReference = db.document("users/alovelace")
Ziel c
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];

Kotlin+KTX

val alovelaceDocumentRef = db.document("users/alovelace")

Java

DocumentReference alovelaceDocumentRef = db.document("users/alovelace");

Dart

final aLovelaceDocRef = db.doc("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("users/alovelace")

Python

a_lovelace_ref = db.document("users/alovelace")
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Gehen

import (
	"cloud.google.com/go/firestore"
)

func createDocReferenceFromString(client *firestore.Client) {
	// Reference to a document with id "alovelace" in the collection "users"
	alovelaceRef := client.Doc("users/alovelace")

	_ = alovelaceRef
}
PHP

PHP

Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

$document = $db->document('users/alovelace');
Einheit
DocumentReference documentRef = db.Document("users/alovelace");
C#

C#

Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

DocumentReference documentRef = db.Document("users/alovelace");
Rubin
document_path_ref = firestore.doc "users/alovelace"

Hierarchische Daten

Um zu verstehen, wie hierarchische Datenstrukturen in Cloud Firestore funktionieren, betrachten Sie eine Beispiel-Chat-App mit Nachrichten und Chatrooms.

Sie können eine Sammlung namens rooms erstellen, um verschiedene Chatrooms zu speichern:

  • Räume

    • name : "my chat room"

    • ...

Da Sie nun über Chatrooms verfügen, entscheiden Sie, wie Sie Ihre Nachrichten speichern. Möglicherweise möchten Sie sie nicht im Dokument des Chatrooms speichern. Dokumente im Cloud Firestore sollten leichtgewichtig sein und ein Chatroom könnte eine große Anzahl von Nachrichten enthalten. Sie können jedoch im Dokument Ihres Chatrooms zusätzliche Sammlungen als Untersammlungen erstellen.

Untersammlungen

Die beste Möglichkeit, 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 für jedes Raumdokument in Ihrer rooms eine Untersammlung mit dem Namen messages erstellen:

  • Räume

    • name : "my chat room"

      • -Nachrichten

        • message1

          from : "alex"
          msg : "Hello World!"

        • message2

          ...

    • ...

In diesem Beispiel würden Sie mit dem folgenden Code einen Verweis auf eine Nachricht in der Untersammlung erstellen:

Web modular API

import { doc } from "firebase/firestore"; 

const messageRef = doc(db, "rooms", "roomA", "messages", "message1");

Web namespaced API

var messageRef = db.collection('rooms').doc('roomA')
                .collection('messages').doc('message1');
Schnell
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
Ziel c
Hinweis: Dieses Produkt ist nicht auf watchOS- und App Clip-Zielen verfügbar.
FIRDocumentReference *messageRef =
    [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"]
    collectionWithPath:@"messages"] documentWithPath:@"message1"];

Kotlin+KTX

val messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")

Java

DocumentReference messageRef = db
        .collection("rooms").document("roomA")
        .collection("messages").document("message1");

Dart

final messageRef = db
    .collection("rooms")
    .doc("roomA")
    .collection("messages")
    .doc("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("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")

Python

room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("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

import (
	"cloud.google.com/go/firestore"
)

func createSubcollectionReference(client *firestore.Client) {
	messageRef := client.Collection("rooms").Doc("roomA").
		Collection("messages").Doc("message1")

	_ = messageRef
}
PHP

PHP

Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Einheit
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
C#

C#

Weitere Informationen zum Installieren und Erstellen eines Cloud Firestore-Clients finden Sie unter Cloud Firestore-Clientbibliotheken .

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 wechselnde 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 auf ein Dokument in einem Dokument verweisen.

Mit Untersammlungen können Sie Daten hierarchisch strukturieren und so den Zugriff auf Daten erleichtern. Um alle Nachrichten in roomA abzurufen, können Sie einen Sammlungsverweis auf die messages erstellen und wie mit jedem anderen Sammlungsverweis damit interagieren.

Dokumente in Untersammlungen können auch Untersammlungen enthalten, sodass Sie Daten weiter verschachteln können. Sie können Daten bis zu einer Tiefe von 100 Ebenen verschachteln.