Model danych Cloud Firestore

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

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

Wszystkie dokumenty muszą być przechowywane w kolekcjach. Dokumenty mogą zawierać podkolekcje i obiekty zagnieżdżone, które mogą zawierać pola podstawowe np. ciągi tekstowe lub złożone obiekty, takie jak listy.

Kolekcje i dokumenty są tworzone w Cloud Firestore bezpośrednio. Po prostu przypisz dane do dokumentu w kolekcji. Jeśli żadna z tych opcji lub dokument nie istnieje, zostanie utworzony przez Cloud Firestore.

Dokumenty

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

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

  • alovelace

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

.

Złożone, zagnieżdżone obiekty w dokumencie są nazywane mapami. Możesz na przykład: utwórz strukturę nazwy użytkownika z powyższego przykładu za pomocą mapy w następujący sposób:

  • alovelace

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

Możesz zauważyć, że dokumenty wyglądają podobnie do JSON. W zasadzie tak właśnie są. Istnieją pewne różnice (np. dokumenty obsługują dodatkowe typy danych mogą nie przekraczać 1 MB), ale generalnie dokumenty można traktować jako lekkie rekordy JSON.

Kolekcje

Dokumenty znajdują się w kolekcjach, które są po prostu kontenerami na dokumenty. Dla: możesz mieć np. kolekcję users zawierającą różnych użytkowników, z których każdy reprezentowane przez dokument:

  •  użytkowników

    • alovelace

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

    • Zjazd

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

Cloud Firestore działa w sposób nieschematyczny, więc masz pełną swobodę umieszczonych w każdym dokumencie oraz typy danych w nich przechowywanych. Dokumenty w tej samej kolekcji mogą zawierać różne pola lub przechowywać różne typy danych w tych polach. Warto jednak użyć atrybutu tych samych pól i typów danych w wielu dokumentach, dzięki czemu możesz wykonywać zapytania dokumenty.

Kolekcja zawiera dokumenty i nic więcej. Nie może zawierać bezpośrednio nieprzetworzonych danych pola z wartościami i nie może zawierać innych kolekcji. (Patrz sekcja Hierarchiczna dane wyjaśniające, w jaki sposób utworzyć bardziej złożoną strukturę. dane w Cloud Firestore).

Nazwy dokumentów w kolekcji są unikalne. Możesz podać własne takich jak identyfikatory użytkowników, lub możesz pozwolić, aby usługa Cloud Firestore tworzyła identyfikatory losowe automatycznie.

Nie musisz tworzyć lub „usuń” kolekcji. Po utworzeniu pierwszego dokument w kolekcji, zbiór istnieje. Jeśli usuniesz wszystkie dokumentów w kolekcji, już nie istnieje.

Odniesienia

Każdy dokument w Cloud Firestore jest jednoznacznie identyfikowany przez lokalizację w bazie danych. W poprzednim przykładzie pokazaliśmy dokument alovelace w obrębie kolekcję users. Aby odwołać się do tej lokalizacji w kodzie, możesz utworzyć odwołania do nich.

Web

import { doc } from "firebase/firestore";

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

Web

var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Swift
Uwaga: ten produkt nie jest dostępny na urządzeniach docelowych watchOS i wycinków aplikacji.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
Uwaga: ten produkt nie jest dostępny na urządzeniach docelowych watchOS i wycinków aplikacji.
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');
Go

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

func createDocReference(client *firestore.Client) {

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

	_ = alovelaceRef
}
PHP

PHP

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w dokumentacji, Biblioteki klienta Cloud Firestore

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

C#

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w dokumentacji, Biblioteki klienta Cloud Firestore

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

Plik referencyjny to nieduży obiekt, który wskazuje tylko w bazie danych. Możesz utworzyć odwołanie niezależnie od tego, czy dane w nim są, czy nie. utworzenie odwołania nie wykonuje żadnych operacji sieciowych.

Możesz też tworzyć odwołania do kolekcji:

Web

import { collection } from "firebase/firestore";

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

Web

var usersCollectionRef = db.collection('users');
Swift
Uwaga: ten produkt nie jest dostępny na urządzeniach docelowych watchOS i wycinków aplikacji.
let usersCollectionRef = db.collection("users")
Objective-C
Uwaga: ten produkt nie jest dostępny na urządzeniach docelowych watchOS i wycinków aplikacji.
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');
Go

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

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

	_ = usersRef
}
PHP

PHP

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w dokumentacji, Biblioteki klienta Cloud Firestore

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

C#

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w dokumentacji, Biblioteki klienta Cloud Firestore

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

Dla wygody możesz także tworzyć odwołania, podając ścieżkę do pliku dokument lub kolekcja w postaci ciągu znaków, z komponentami ścieżki oddzielonymi znakiem ukośnik (/). Aby na przykład utworzyć odwołanie do dokumentu alovelace:

Web

import { doc } from "firebase/firestore"; 

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

Web

var alovelaceDocumentRef = db.doc('users/alovelace');
Swift
Uwaga: ten produkt nie jest dostępny na urządzeniach docelowych watchOS i wycinków aplikacji.
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
Uwaga: ten produkt nie jest dostępny na urządzeniach docelowych watchOS i wycinków aplikacji.
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');
Go

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

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w dokumentacji, Biblioteki klienta Cloud Firestore

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

C#

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w dokumentacji, Biblioteki klienta Cloud Firestore

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

Dane hierarchiczne

Aby zrozumieć, jak działają hierarchiczne struktury danych w Cloud Firestore, rozważ zastosowanie przykładowej aplikacji do obsługi wiadomości i pokoi czatu.

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

  • pokoju

    • sala A

      name : "my chat room"

    • sala B

      ...

Skoro masz już pokoje czatu, zdecyduj, jak chcesz przechowywać wiadomości. Możesz nie chcesz je zapisać w dokumencie pokoju czatu. Dokumenty w Cloud Firestore a pokój czatu może zawierać wiele wiadomości. Dodatkowe kolekcje możesz jednak utworzyć w dokumencie w pokoju czatu. jako kolekcji podrzędnych.

Podkolekcje

W takim przypadku najlepszym sposobem przechowywania wiadomości jest użycie kolekcji podrzędnych. O kolekcja podrzędna jest zbiorem powiązanym z określonym dokumentem.

Możesz utworzyć kolekcję podrzędną o nazwie messages dla każdego dokumentu w pokoju w Twoja kolekcja rooms:

  • pokoju

    • sala A

      name : "my chat room"

      • wiadomości

        • wiadomość1

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

        • wiadomość2

          ...

    • sala B

      ...

W tym przykładzie możesz utworzyć odniesienie do wiadomości w kolekcji podrzędnej następującym kodem:

Web

import { doc } from "firebase/firestore"; 

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

Web

var messageRef = db.collection('rooms').doc('roomA')
                .collection('messages').doc('message1');
Swift
Uwaga: ten produkt nie jest dostępny na urządzeniach docelowych watchOS i wycinków aplikacji.
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
Objective-C
Uwaga: ten produkt nie jest dostępny na urządzeniach docelowych watchOS i wycinków aplikacji.
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');
Go

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

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

	_ = messageRef
}
PHP

PHP

Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w dokumentacji, Biblioteki klienta Cloud Firestore

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Unity
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 dokumentacji, Biblioteki klienta Cloud Firestore

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

Zwróć uwagę na naprzemienne wzorce kolekcji i dokumentów. Twoje kolekcje a dokumenty muszą zawsze być zgodne z tym wzorcem. Nie możesz odwoływać się do kolekcji w kolekcji lub w dokumencie w dokumencie.

Kolekcje podrzędne pozwalają hierarchicznie porządkować dane, co ułatwia ich dostęp. Aby pobrać wszystkie wiadomości z usługi roomA, możesz utworzyć plik referencyjny kolekcji do kolekcji podrzędnej messages i korzystać z niej jak z każdej innej odniesienie do kolekcji.

Dokumenty w kolekcjach podrzędnych mogą też zawierać podkolekcje, dzięki czemu możesz: zagnieżdżać dane. Dane można zagnieżdżać do 100 poziomów.