Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

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

  • Alovelace

    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:

  • Alovelace

    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:

  • Benutzer

    • Alovelace

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

    • aturing

      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.

Netz
var alovelaceDocumentRef = db.collection('users').doc('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 oder nicht, und beim Erstellen einer Referenz werden keine Netzwerkvorgänge ausgeführt.

Sie können auch Verweise auf Sammlungen erstellen:

Netz
var usersCollectionRef = db.collection('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:

Netz
var alovelaceDocumentRef = db.doc('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:

  • Räume

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

  • Räume

    • name : "my chat room"

      • Lesezeichen Nachrichten

        • message1

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

        • message2

          ...

    • ...

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

Netz
var messageRef = db.collection('rooms').doc('roomA')
                .collection('messages').doc('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 Unterkollektionen 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.