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 przechowujesz dane w dokumentach, które są porządkowane 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 kolekcjach. Dokumenty mogą zawierać podkolekcje i zagnieżdżone obiekty, które mogą zawierać pola prymitywne, takie jak ciągi znaków, lub złożone obiekty, takie jak listy.
Kolekcje i dokumenty są tworzone domyślnie w usłudze Cloud Firestore. Po prostu przypisz dane do dokumentu w kolekcji. Jeśli kolekcja lub dokument nie istnieją, Cloud Firestore je tworzy.
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 nazywane są mapami. Możesz na przykład ustrukturyzować nazwę użytkownika z powyższego przykładu za pomocą mapy takiej jak ta:
alovelace
name :
first : "Ada"
last : "Lovelace"
born : 1815
Możesz zauważyć, że dokumenty są bardzo podobne do formatu JSON. W zasadzie tak. Istnieją pewne różnice (np. dokumenty obsługują dodatkowe typy danych, a ich rozmiar jest ograniczony do 1 MB), ale ogólnie można traktować dokumenty jak 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
zawierającą różnych użytkowników, z których każdy jest 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 wybieraniu pól do umieszczania w każdym dokumencie i typów danych, które 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 kilku dokumentach, ponieważ ułatwia to tworzenie zapytań dotyczących tych dokumentów.
Kolekcja zawiera tylko dokumenty. Nie może on bezpośrednio zawierać pól z wartościami ani innych kolekcji. Wyjaśnienie, jak tworzyć strukturę bardziej złożonych danych w narzędziu Cloud Firestore, znajdziesz w artykule Dane hierarchiczne.
Nazwy dokumentów w kolekcji są unikalne. Możesz podać własne klucze, takie jak identyfikatory użytkowników, lub pozwolić Cloud Firestore automatycznie tworzyć losowe identyfikatory.
Nie musisz tworzyć ani usuwać kolekcji. Po utworzeniu pierwszego dokumentu w kolekcji kolekcja istnieje. Jeśli usuniesz wszystkie dokumenty z kolekcji, kolekcja przestanie istnieć.
Odniesienia
Każdy dokument w Cloud Firestore jest jednoznacznie identyfikowany przez swoją lokalizację w bazie danych. Poprzedni przykład dotyczył dokumentu alovelace
w kolekcji users
. Aby odwoływać się do tej lokalizacji w kodzie, możesz utworzyć odniesienie do niej.
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+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
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 Cloud Firestore Biblioteki klienta.
Unity
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.
Ruby
Odwołania to lekkie obiekty, które wskazują po prostu lokalizację w bazie danych. Możesz utworzyć odwołanie niezależnie od tego, czy istnieją w nim dane. 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+KTX
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 Cloud Firestore Biblioteki klienta.
Unity
CollectionReference collectionRef = db.Collection("users");
C#
C#
Więcej informacji o instalowaniu i tworzeniu klienta Cloud Firestore znajdziesz w artykule Cloud Firestore Biblioteki klienta.
Ruby
Dla wygody możesz też tworzyć odwołania, podając ścieżkę do dokumentu lub kolekcji jako ciąg znaków, z elementami ścieżki rozdzielonymi znakiem ukośnika (/
). Na przykład, aby 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+KTX
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 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 bibliotekach klienta Cloud Firestore.
Ruby
Dane hierarchiczne
Aby zrozumieć, jak działają hierarchiczne struktury danych w Cloud Firestore, zastanów się nad przykładową aplikacją do czatu z wiadomościami i pokojem czatu.
Możesz utworzyć kolekcję o nazwie rooms
, aby przechowywać różne pokoje czatu:
pokoju
roomA
name : "my chat room"
pokój B
...
Teraz, gdy masz pokoje czatu, zdecyduj, jak przechowywać wiadomości. Być może nie chcesz zapisywać ich w dokumencie pokoju czatu. Dokumenty w usłudze Cloud Firestore powinny być nieduże, a pokój czatu może zawierać wiele wiadomości. W dokumencie w pokoju czatu możesz jednak tworzyć dodatkowe kolekcje jako kolekcje podrzędne.
Podkolekcji
W tym przypadku najlepszym sposobem na przechowywanie wiadomości jest użycie podkolekcji. Kolekcja podrzędna to kolekcja powiązana z określonym dokumentem.
Możesz utworzyć podkolekcją o nazwie messages
dla każdego dokumentu sali w kolekcji rooms
:
sal
roomA
name : "my chat room"
wiadomości
wiadomość1
from : "alex"
msg : "Hello World!"
message2
...
sala B
...
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+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
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 Cloud Firestore Biblioteki 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 artykule Cloud Firestore Biblioteki klienta.
Ruby
Zwróć uwagę na naprzemienny wzór 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ą uporządkowanie danych w hierarchii, co ułatwia do nich dostęp. Aby uzyskać wszystkie wiadomości w kolekcji roomA
, możesz utworzyć odwołanie do podkolekcji messages
i działać z nim tak samo jak z dowolnym innym odwołaniem do kolekcji.
Dokumenty w kolekcjach podrzędnych mogą też zawierać podkolekcje, co pozwala na dalsze zagnieżdżanie danych. Dane możesz zagnieżdżać do 100 poziomów.