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ą zorganizowane w kolekcje .
Każdy dokument zawiera zestaw par klucz-wartość. Cloud Firestore jest zoptymalizowany do przechowywania dużych kolekcji małych dokumentów.
Wszystkie dokumenty muszą być przechowywane w zbiorach. Dokumenty mogą zawierać podkolekcje i obiekty zagnieżdżone, przy czym oba mogą zawierać pola pierwotne, takie jak ciągi znaków, 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 ją utworzy.
Dokumenty
W Cloud Firestore jednostką przechowywania jest dokument. Dokument to lekki rekord zawierający pola, które są mapowane na wartości. Każdy dokument jest identyfikowany poprzez nazwę.
Dokument reprezentujący alovelace
użytkownika może wyglądać następująco:
miłość
first : "Ada"
last : "Lovelace"
born : 1815
Złożone, zagnieżdżone obiekty w dokumencie nazywane są mapami. Na przykład możesz uporządkować nazwę użytkownika z powyższego przykładu za pomocą mapy w następujący sposób:
miłość
name :
first : "Ada"
last : "Lovelace"
born : 1815
Możesz zauważyć, że dokumenty wyglądają bardzo podobnie do JSON. W zasadzie takie są. Istnieją pewne różnice (na przykład dokumenty obsługują dodatkowe typy danych i mają ograniczony rozmiar do 1 MB), ale ogólnie rzecz biorąc, dokumenty można traktować jako lekkie rekordy JSON.
Kolekcje
Dokumenty żyją w kolekcjach, 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
miłość
first : "Ada"
last : "Lovelace"
born : 1815
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore nie jest schematyczny, więc masz pełną swobodę w zakresie pól, które umieścisz w każdym dokumencie i typów danych przechowywanych w tych polach. Dokumenty w tej samej kolekcji mogą zawierać różne pola lub przechowywać w tych polach różne typy danych. Jednak dobrym pomysłem jest używanie tych samych pól i typów danych w wielu dokumentach, aby móc łatwiej przeglądać dokumenty.
Kolekcja zawiera dokumenty i nic więcej. Nie może bezpośrednio zawierać surowych pól z wartościami i nie może zawierać innych kolekcji. (Zobacz Dane hierarchiczne , aby uzyskać wyjaśnienie, jak strukturyzować 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 możesz pozwolić Cloud Firestore na automatyczne utworzenie losowych identyfikatorów.
Nie musisz „tworzyć” ani „usuwać” kolekcji. Po utworzeniu pierwszego dokumentu w kolekcji kolekcja istnieje. Jeśli usuniesz wszystkie dokumenty w kolekcji, ta już nie istnieje.
Bibliografia
Każdy dokument w Cloud Firestore jest jednoznacznie identyfikowany na podstawie jego lokalizacji w bazie danych. Poprzedni przykład pokazał alovelace
dokumentu w obrębie kolekcji users
. Aby odwołać się do tej lokalizacji w kodzie, możesz utworzyć do niej odniesienie .
Web modular API
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web namespaced API
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Szybki
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Cel 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");
Jawa
Pyton
Python
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
Iść
PHP
PHP
Więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore można znaleźć w Bibliotekach klienta Cloud Firestore .
Jedność
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore można znaleźć w Bibliotekach klienta Cloud Firestore .
Rubin
Referencja to lekki obiekt, który po prostu wskazuje lokalizację w bazie danych. Możesz utworzyć odniesienie niezależnie od tego, czy istnieją tam dane, czy nie, a utworzenie odniesienia nie powoduje wykonania żadnych operacji sieciowych.
Możesz także tworzyć odniesienia do kolekcji :
Web modular API
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web namespaced API
var usersCollectionRef = db.collection('users');
Szybki
let usersCollectionRef = db.collection("users")
Cel 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");
Jawa
Pyton
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
Iść
PHP
PHP
Więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore można znaleźć w Bibliotekach klienta Cloud Firestore .
Jedność
CollectionReference collectionRef = db.Collection("users");
C#
C#
Więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore można znaleźć w Bibliotekach klienta Cloud Firestore .
Rubin
Dla wygody można także tworzyć odniesienia, określając ścieżkę do dokumentu lub kolekcji w postaci ciągu znaków, przy czym składniki ścieżki oddzielone są ukośnikiem ( /
). Na przykład, aby utworzyć odniesienie do dokumentu alovelace
:
Web modular API
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web namespaced API
var alovelaceDocumentRef = db.doc('users/alovelace');
Szybki
let aLovelaceDocumentReference = db.document("users/alovelace")
Cel 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");
Jawa
Pyton
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
Iść
PHP
PHP
Więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore można znaleźć w Bibliotekach klienta Cloud Firestore .
Jedność
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore można znaleźć w Bibliotekach klienta Cloud Firestore .
Rubin
Dane hierarchiczne
Aby zrozumieć, jak działają hierarchiczne struktury danych w Cloud Firestore, rozważ przykładową aplikację do czatowania z wiadomościami i pokojami rozmów.
Możesz utworzyć kolekcję zwaną rooms
, w której będą przechowywane różne pokoje rozmów:
sala
Aname : "my chat room"
sala
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 swojego pokoju rozmów jako podkolekcje.
Podkolekcje
Najlepszym sposobem przechowywania wiadomości w tym scenariuszu jest użycie kolekcji podrzędnych. Podkolekcja to zbiór powiązany z konkretnym dokumentem.
Możesz utworzyć podkolekcję o nazwie messages
dla każdego dokumentu pokoju w kolekcji rooms
:
sala
Aname : "my chat room"
wiadomość
1from : "alex"
msg : "Hello World!"
wiadomość
2...
sala
B...
W tym przykładzie utworzysz odwołanie do wiadomości w podkolekcji za pomocą następującego kodu:
Web modular API
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Web namespaced API
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
Szybki
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Cel 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");
Jawa
Pyton
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
Iść
PHP
PHP
Więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore można znaleźć w Bibliotekach klienta Cloud Firestore .
Jedność
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
Więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore można znaleźć w Bibliotekach klienta Cloud Firestore .
Rubin
Zwróć uwagę na naprzemienny układ zbiorów i dokumentów. Twoje zbiory i dokumenty muszą zawsze być zgodne z tym wzorem. Nie można odwoływać się do kolekcji w kolekcji ani do dokumentu w dokumencie.
Podkolekcje umożliwiają hierarchiczną strukturę danych, dzięki czemu dostęp do nich jest łatwiejszy. Aby uzyskać wszystkie wiadomości w roomA
, możesz utworzyć odniesienie do kolekcji dla messages
podkolekcji i wchodzić z nimi w interakcję tak samo, jak z każdym innym odniesieniem do kolekcji.
Dokumenty w podkolekcjach mogą również zawierać podkolekcje, co pozwala na dalsze zagnieżdżanie danych. Dane można zagnieżdżać na głębokość do 100 poziomów.