Cloud Firestore to baza danych NoSQL zorientowana na dokumenty. W przeciwieństwie do bazy danych SQL nie ma w niej tabel ani wierszy. Zamiast tego dane są przechowywane w dokumentach, które są uporządkowane w kolekcje.
Każdy dokument zawiera zestaw par klucz-wartość. Cloud Firestore jest zoptymalizowana pod kątem przechowywania dużych zbiorów małych dokumentów.
Wszystkie dokumenty muszą być przechowywane w kolekcjach. Dokumenty mogą zawierać podkolekcje i zagnieżdżone obiekty, które mogą zawierać pola podstawowe, takie jak ciągi znaków, lub złożone obiekty, takie jak listy.
Kolekcje i dokumenty są tworzone niejawnie w Cloud Firestore. Wystarczy przypisać dane do dokumentu w kolekcji. Jeśli kolekcja lub dokument nie istnieje, Cloud Firestore utworzy je.
Dokumenty
W Cloud Firestore jednostką przechowywania danych jest dokument. Dokument to lekki rekord zawierający pola, które są mapowane na wartości. Każdy dokument jest identyfikowany za pomocą nazwy.
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 utworzyć mapę z nazwą użytkownika z przykładu powyżej w ten sposób:
alovelace
name :
first : "Ada"
last : "Lovelace"
born : 1815
Możesz zauważyć, że dokumenty bardzo przypominają format JSON. W zasadzie tak jest. Istnieją pewne różnice (np. dokumenty obsługują dodatkowe typy danych i mają ograniczenie rozmiaru do 1 MB), ale ogólnie można traktować dokumenty jako lekkie rekordy JSON.
Kolekcje
Dokumenty znajdują się w kolekcjach, które są po prostu kontenerami na dokumenty. Możesz na przykład utworzyć users
kolekcję, która będzie zawierać różnych użytkowników, z których każdy będzie reprezentowany przez dokument:
użytkowników
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
aturing
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore nie ma schematu, więc masz pełną swobodę w określaniu, jakie pola mają się znajdować w poszczególnych dokumentach i jakie typy danych mają być w nich przechowywane. Dokumenty w tej samej kolekcji mogą zawierać różne pola lub przechowywać w nich różne typy danych. Warto jednak używać tych samych pól i typów danych w wielu dokumentach, aby łatwiej było wysyłać do nich zapytania.
Kolekcja zawiera dokumenty i nic więcej. Nie może bezpośrednio zawierać surowych pól z wartościami ani innych kolekcji. (Więcej informacji o tym, jak strukturyzować bardziej złożone dane w Cloud Firestore, znajdziesz w sekcji Dane hierarchiczne).
Nazwy dokumentów w kolekcji są unikalne. Możesz podać własne klucze, np. identyfikatory użytkowników, lub pozwolić Cloud Firestore automatycznie tworzyć losowe identyfikatory.
Nie musisz „tworzyć” ani „usuwać” kolekcji. Gdy utworzysz pierwszy dokument w kolekcji, kolekcja będzie istnieć. Jeśli usuniesz wszystkie dokumenty z kolekcji, przestanie ona istnieć.
Odniesienia
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
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Swift
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
FIRDocumentReference *alovelaceDocumentRef = [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];
Kotlin
val alovelaceDocumentRef = db.collection("users").document("alovelace")
Java
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
Dart
final alovelaceDocumentRef = db.collection("users").doc("alovelace");
Java
Python
Python
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
Go
PHP
PHP
Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w sekcji Cloud FirestoreBiblioteki klienta.
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w sekcji Cloud FirestoreBiblioteki klienta.
Ruby
Odwołanie to prosty obiekt, który wskazuje tylko lokalizację w bazie danych. Możesz utworzyć odwołanie niezależnie od tego, czy dane istnieją, a utworzenie odwołania nie powoduje ż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
let usersCollectionRef = db.collection("users")
Objective-C
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
Kotlin
val usersCollectionRef = db.collection("users")
Java
CollectionReference usersCollectionRef = db.collection("users");
Dart
final usersCollectionRef = db.collection("users");
Java
Python
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
Go
PHP
PHP
Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w sekcji Cloud FirestoreBiblioteki klienta.
Unity
CollectionReference collectionRef = db.Collection("users");
C#
C#
Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w sekcji Cloud FirestoreBiblioteki klienta.
Ruby
Dla wygody możesz też tworzyć odwołania, podając ścieżkę do dokumentu lub kolekcji jako ciąg znaków, w którym poszczególne elementy ścieżki są oddzielone ukośnikiem (/
). 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
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
FIRDocumentReference *aLovelaceDocumentReference = [self.db documentWithPath:@"users/alovelace"];
Kotlin
val alovelaceDocumentRef = db.document("users/alovelace")
Java
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
Dart
final aLovelaceDocRef = db.doc("users/alovelace");
Java
Python
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
Go
PHP
PHP
Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w sekcji Cloud FirestoreBiblioteki klienta.
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w sekcji Cloud FirestoreBiblioteki klienta.
Ruby
Dane hierarchiczne
Aby zrozumieć, jak działają hierarchiczne struktury danych w Cloud Firestore, rozważmy przykład aplikacji do czatowania z wiadomościami i pokojami.
Możesz utworzyć kolekcję o nazwie rooms
, aby przechowywać różne pokoje czatu:
sal
pokójA
name : "my chat room"
roomB
...
Teraz, gdy masz już pokoje czatu, zdecyduj, jak chcesz przechowywać wiadomości. Możesz nie chcieć przechowywać ich w dokumencie pokoju czatu. Dokumenty w Cloud Firestore powinny być lekkie, a pokój czatu może zawierać dużą liczbę wiadomości. Możesz jednak utworzyć dodatkowe kolekcje w dokumencie pokoju czatu jako podkolekcje.
Podkolekcje
W takim przypadku najlepiej przechowywać wiadomości w podzbiorach. Podkolekcja to kolekcja powiązana z konkretnym dokumentem.
Możesz utworzyć podkolekcję o nazwie messages
dla każdego dokumentu pokoju w kolekcji rooms
:
sal
pokójA
name : "my chat room"
wiadomości
message1
from : "alex"
msg : "Hello World!"
message2
...
roomB
...
W tym przykładzie utworzysz odwołanie do wiadomości w podkolekcji za pomocą tego kodu:
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
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Objective-C
FIRDocumentReference *messageRef = [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"] collectionWithPath:@"messages"] documentWithPath:@"message1"];
Kotlin
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
Python
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
Go
PHP
PHP
Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w sekcji Cloud FirestoreBiblioteki klienta.
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 sekcji Cloud FirestoreBiblioteki klienta.
Ruby
Zwróć uwagę na naprzemienny układ kolekcji i dokumentów. Twoje kolekcje i dokumenty muszą zawsze być zgodne z tym wzorcem. Nie możesz odwoływać się do kolekcji w kolekcji ani do dokumentu w dokumencie.
Podzbiory umożliwiają hierarchiczne strukturyzowanie danych, co ułatwia dostęp do nich. Aby uzyskać wszystkie wiadomości w roomA
, możesz utworzyć odwołanie do kolekcji podrzędnej messages
i pracować z nim tak samo jak z każdym innym odwołaniem do kolekcji.
Dokumenty w podkolekcjach mogą również zawierać podkolekcje, co pozwala na dalsze zagnieżdżanie danych. Dane możesz zagnieżdżać na maksymalnie 100 poziomach.