Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Model danych Cloud Firestore

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Cloud Firestore to baza danych NoSQL zorientowana na dokumenty. W przeciwieństwie do bazy danych SQL nie ma tabel ani wierszy. Zamiast tego przechowujesz dane w dokumentach , które są zorganizowane w kolekcje .

Każdy dokument zawiera zestaw par klucz-wartość. Cloud Firestore jest zoptymalizowany pod kątem przechowywania dużych kolekcji małych dokumentów.

Wszystkie dokumenty muszą być przechowywane w zbiorach. Dokumenty mogą zawierać kolekcje podrzędne i obiekty zagnieżdżone, z których oba mogą zawierać pola pierwotne, takie jak ciągi, lub obiekty złożone, takie jak listy.

Kolekcje i dokumenty są tworzone niejawnie w Cloud Firestore. Po prostu przypisz dane do dokumentu w kolekcji. Jeśli kolekcja lub dokument nie istnieje, Cloud Firestore go utworzy.

Dokumenty

W Cloud Firestore jednostką pamięci jest dokument. Dokument to lekki rekord zawierający pola, które są mapowane na wartości. Każdy dokument jest identyfikowany nazwą.

Dokument reprezentujący alovelace użytkownika może wyglądać tak:

  • kochanie

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

Złożone, zagnieżdżone obiekty w dokumencie nazywane są mapami. Na przykład możesz ustrukturyzować nazwę użytkownika z powyższego przykładu za pomocą mapy w następujący sposób:

  • kochanie

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

Możesz zauważyć, że dokumenty wyglądają bardzo podobnie do JSON. W rzeczywistości w zasadzie są. Istnieją pewne różnice (na przykład dokumenty obsługują dodatkowe typy danych i mają ograniczony rozmiar do 1 MB), ale ogólnie można traktować dokumenty jako lekkie rekordy JSON.

Kolekcje

Dokumenty żyją w zbiorach, które są po prostu pojemnikami na dokumenty. Na przykład możesz mieć kolekcję users zawierającą różnych użytkowników, z których każdy jest reprezentowany przez dokument:

  • użytkownicy

    • kochanie

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

    • klasowe

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

Cloud Firestore jest pozbawiony schematów, dzięki czemu masz pełną swobodę w zakresie tego, jakie pola umieszczasz w każdym dokumencie i jakie typy danych przechowujesz w tych polach. Wszystkie dokumenty w tej samej kolekcji mogą zawierać różne pola lub przechowywać w nich różne typy danych. Jednak dobrym pomysłem jest używanie tych samych pól i typów danych w wielu dokumentach, aby łatwiej można było wykonywać zapytania dotyczące dokumentów.

Kolekcja zawiera dokumenty i nic więcej. Nie może bezpośrednio zawierać nieprzetworzonych pól z wartościami i nie może zawierać innych kolekcji. (Zobacz Dane hierarchiczne , aby dowiedzieć się, jak uporządkować bardziej złożone dane w Cloud Firestore).

Nazwy dokumentów w kolekcji są unikalne. Możesz podać własne klucze, takie jak identyfikatory użytkowników, lub pozwolić Cloud Firestore na automatyczne tworzenie losowych identyfikatorów.

Nie musisz „tworzyć” ani „usuwać” kolekcji. Po utworzeniu pierwszego dokumentu w kolekcji kolekcja istnieje. Jeśli usuniesz wszystkie dokumenty w kolekcji, kolekcja już nie istnieje.

Bibliografia

Każdy dokument w Cloud Firestore jest jednoznacznie identyfikowany przez jego lokalizację w bazie danych. W poprzednim przykładzie pokazano dokument alovelace w kolekcji users . Aby odwołać się do tej lokalizacji w kodzie, możesz utworzyć do niej odwołanie .

Web version 9

import { doc } from "firebase/firestore";

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

Web version 8

var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Szybki
Uwaga: Ten produkt nie jest dostępny w systemach docelowych watchOS i App Clip.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Cel C
Uwaga: Ten produkt nie jest dostępny w systemach docelowych watchOS i App Clip.
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")

Dart

final alovelaceDocumentRef = db.collection("users").doc("alovelace");
Jawa
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
Pyton
a_lovelace_ref = db.collection(u'users').document(u'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');
Iść
alovelaceRef := client.Collection("users").Doc("alovelace")
PHP

PHP

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w Bibliotekach klienta Cloud Firestore .

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

C#

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w Bibliotekach klienta Cloud Firestore .

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

Odwołanie to lekki obiekt, który po prostu wskazuje lokalizację w Twojej bazie danych. Odniesienie można utworzyć niezależnie od tego, czy istnieją tam dane, a tworzenie odniesienia nie wykonuje żadnych operacji sieciowych.

Możesz również tworzyć odniesienia do kolekcji :

Web version 9

import { collection } from "firebase/firestore";

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

Web version 8

var usersCollectionRef = db.collection('users');
Szybki
Uwaga: Ten produkt nie jest dostępny w systemach docelowych watchOS i App Clip.
let usersCollectionRef = db.collection("users")
Cel C
Uwaga: Ten produkt nie jest dostępny w systemach docelowych watchOS i App Clip.
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];

Java

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

Kotlin+KTX

val usersCollectionRef = db.collection("users")

Dart

final usersCollectionRef = db.collection("users");
Jawa
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Pyton
users_ref = db.collection(u'users')

Python

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Iść
usersRef := client.Collection("users")
PHP

PHP

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w Bibliotekach klienta Cloud Firestore .

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

C#

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w Bibliotekach klienta Cloud Firestore .

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

Dla wygody można również tworzyć odwołania, określając ścieżkę do dokumentu lub kolekcji jako ciąg, z komponentami ścieżki oddzielonymi ukośnikiem ( / ). Na przykład, aby utworzyć odniesienie do dokumentu alovelace :

Web version 9

import { doc } from "firebase/firestore"; 

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

Web version 8

var alovelaceDocumentRef = db.doc('users/alovelace');
Szybki
Uwaga: Ten produkt nie jest dostępny w systemach docelowych watchOS i App Clip.
let aLovelaceDocumentReference = db.document("users/alovelace")
Cel C
Uwaga: Ten produkt nie jest dostępny w systemach docelowych watchOS i App Clip.
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];

Java

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

Kotlin+KTX

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

Dart

final aLovelaceDocRef = db.doc("users/alovelace");
Jawa
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
Pyton
a_lovelace_ref = db.document(u'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');
Iść
// Reference to a document with id "alovelace" in the collection "users"
alovelaceRef := client.Doc("users/alovelace")
PHP

PHP

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w Bibliotekach klienta Cloud Firestore .

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

C#

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w Bibliotekach klienta Cloud Firestore .

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

Dane hierarchiczne

Aby zrozumieć, jak działają hierarchiczne struktury danych w Cloud Firestore, rozważ przykładową aplikację do czatu z wiadomościami i pokojami czatu.

Możesz utworzyć kolekcję o nazwie rooms , aby przechowywać różne pokoje rozmów:

  • pokoje

    • A

      name : "my chat room"

    • B

      ...

Teraz, gdy masz już pokoje rozmów, zdecyduj, jak przechowywać wiadomości. Możesz nie chcieć przechowywać ich w dokumencie pokoju rozmów. Dokumenty w Cloud Firestore powinny być lekkie, a pokój rozmów może zawierać dużą liczbę wiadomości. Możesz jednak tworzyć dodatkowe kolekcje w dokumencie pokoju rozmów jako kolekcje podrzędne.

Podkolekcje

Najlepszym sposobem przechowywania wiadomości w tym scenariuszu jest użycie kolekcji podrzędnych. Podkolekcja to kolekcja powiązana z określonym dokumentem.

Możesz utworzyć podkolekcję o nazwie messages dla każdego dokumentu pokoju w swojej kolekcji rooms :

  • pokoje

    • A

      name : "my chat room"

      • wiadomości

        • wiadomość

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

        • wiadomość

          ...

    • B

      ...

W tym przykładzie utworzysz odwołanie do wiadomości w podkolekcji z następującym kodem:

Web version 9

import { doc } from "firebase/firestore"; 

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

Web version 8

var messageRef = db.collection('rooms').doc('roomA')
                .collection('messages').doc('message1');
Szybki
Uwaga: Ten produkt nie jest dostępny w systemach docelowych watchOS i App Clip.
let messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")
Cel C
Uwaga: Ten produkt nie jest dostępny w systemach docelowych watchOS i App Clip.
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")

Dart

final messageRef = db
    .collection("rooms")
    .doc("roomA")
    .collection("messages")
    .doc("message1");
Jawa
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
Pyton
room_a_ref = db.collection(u'rooms').document(u'roomA')
message_ref = room_a_ref.collection(u'messages').document(u'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');
Iść
messageRef := client.Collection("rooms").Doc("roomA").
	Collection("messages").Doc("message1")
PHP

PHP

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w Bibliotekach klienta Cloud Firestore .

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

C#

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w Bibliotekach klienta Cloud Firestore .

DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
Rubin
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

Zwróć uwagę na naprzemienny wzór kolekcji i dokumentów. Twoje kolekcje i dokumenty muszą być zawsze zgodne z tym wzorcem. Nie można odwoływać się do kolekcji w kolekcji ani do dokumentu w dokumencie.

Kolekcje podrzędne umożliwiają hierarchiczną strukturę danych, ułatwiając dostęp do danych. Aby uzyskać wszystkie wiadomości w pokoju A , możesz utworzyć odwołanie do kolekcji do messages z roomA i wchodzić z nimi w interakcję tak, jak z każdym innym odniesieniem do kolekcji.

Dokumenty w podkolekcjach mogą również zawierać podkolekcje, co pozwala na dalsze zagnieżdżanie danych. Możesz zagnieżdżać dane do 100 poziomów.