Cloud Firestore to baza danych NoSQL zorientowana na dokumenty. W odróżnieniu od bazy danych SQL nie ma tu tabel ani wierszy. Zamiast tego dane są przechowywane w dokumentach, które są pogrupowane w kolekcje.
Każdy dokument zawiera zestaw par klucz-wartość. Cloud Firestore jest zoptymalizowana pod kątem przechowywania dużych kolekcji małych dokumentów.
Wszystkie dokumenty muszą być przechowywane w kolekcjach. Dokumenty mogą zawierać podkolekcje i zagnieżdżone obiekty, które mogą obejmować pola podstawowe, takie jak ciągi znaków, lub obiekty złożone, 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ą miejsca na dane jest dokument. Dokument to lekki rekord zawierający pola, które są mapowane na wartości. Każdy dokument jest identyfikowany przez 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 utworzyć strukturę nazwy użytkownika z powyższego przykładu za pomocą mapy w ten sposób:
alovelace
name :
first : "Ada"
last : "Lovelace"
born : 1815
Możesz zauważyć, że dokumenty wyglądają bardzo podobnie do formatu JSON. W zasadzie tak jest. Istnieją pewne różnice (na przykład dokumenty obsługują dodatkowe typy danych i są ograniczone do limitu rozmiaru dokumentu), 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 mieć kolekcję users, która zawiera różnych użytkowników, z których każdy jest reprezentowany przez dokument:
użytkowników
alovelace
first : "Ada"
last : "Lovelace"
born : 1815– polecane
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore nie ma schematu, więc masz pełną swobodę w zakresie tego, jakie pola umieszczasz w każdym dokumencie i jakie typy danych w nich przechowujesz. Dokumenty w tej samej kolekcji mogą zawierać różne pola lub przechowywać różne typy danych w tych polach. Warto jednak używać tych samych pól i typów danych w wielu dokumentach, aby ułatwić wysyłanie zapytań do dokumentów.
Kolekcja zawiera tylko dokumenty. Nie może bezpośrednio zawierać nieprzetworzonych pól z wartościami ani innych kolekcji. (Więcej informacji o strukturyzowaniu bardziej złożonych danych w Cloud Firestore znajdziesz w artykule Dane hierarchiczne).
Nazwy dokumentów w kolekcji są unikalne. Możesz podać własne klucze, np. identyfikatory użytkowników, lub pozwolić, aby Cloud Firestore automatycznie tworzyła losowe identyfikatory.
Nie musisz „tworzyć” ani „usuwać” kolekcji. Kolekcja powstaje po utworzeniu w niej pierwszego dokumentu. Jeśli usuniesz wszystkie dokumenty w kolekcji, przestanie ona istnieć.
Odniesienia
Każdy dokument w Cloud Firestore jest jednoznacznie identyfikowany przez swoją lokalizację w bazie danych. Poprzedni przykład pokazywał 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 artykule o bibliotekach klienta Cloud Firestore.
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w artykule o bibliotekach klienta Cloud Firestore.
Ruby
Referencja to lekki obiekt, który wskazuje 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 artykule o bibliotekach klienta Cloud Firestore.
Unity
CollectionReference collectionRef = db.Collection("users");
C#
C#
Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w artykule o bibliotekach klienta Cloud Firestore.
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 komponenty ścieżki są rozdzielone 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 artykule o bibliotekach klienta Cloud Firestore.
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w artykule o bibliotekach klienta Cloud Firestore.
Ruby
Dane hierarchiczne
Aby zrozumieć, jak działają hierarchiczne struktury danych w Cloud Firestore, rozważmy przykładową aplikację do obsługi czatu z wiadomościami i pokojami czatu.
Możesz utworzyć kolekcję o nazwie rooms, aby przechowywać różne pokoje czatu:
sal
sala
name : "my chat room"roomB
...
Teraz, gdy masz 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
Najlepszym sposobem przechowywania wiadomości w tym scenariuszu jest użycie podkolekcji. Podkolekcja to kolekcja powiązana z konkretnym dokumentem.
Możesz utworzyć podkolekcję o nazwie messages dla każdego dokumentu pokoju w kolekcji rooms:
sal
roomA
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 artykule o bibliotekach klienta Cloud Firestore.
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 artykule o bibliotekach klienta Cloud Firestore.
Ruby
Zwróć uwagę na naprzemienny wzorzec kolekcji i dokumentów. 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.
Podkolekcje umożliwiają hierarchiczne porządkowanie danych, co ułatwia dostęp do nich. Aby pobrać wszystkie wiadomości w roomA, możesz utworzyć odwołanie do kolekcji podrzędnej messages i korzystać z niego tak samo jak z każdego innego odwołania do kolekcji.
Dokumenty w podkolekcjach mogą również zawierać podkolekcje, co pozwala na dalsze zagnieżdżanie danych. Dane możesz zagnieżdżać do 100 poziomów.