Cloud Firestore to zorientowana na dokumenty baza danych NoSQL. W przeciwieństwie do bazy danych SQL nie ma 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, z których oba mogą zawierać prymitywne pola, 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 je utworzy.
Dokumenty
W Cloud Firestore jednostką przechowywania jest dokument. Dokument jest lekkim rekordem zawierającym 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:
zakochana
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:
zakochana
name :
first : "Ada"
last : "Lovelace"
born : 1815
Możesz zauważyć, że dokumenty wyglądają bardzo podobnie do formatu JSON. W zasadzie są. Istnieją pewne różnice (na przykład dokumenty obsługują dodatkowe typy danych i są ograniczone do 1 MB), ale ogólnie można traktować dokumenty 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:
zakochana
first : "Ada"
last : "Lovelace"
born : 1815
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore jest bezschematowy, więc masz pełną swobodę w zakresie tego, jakie pola umieszczasz w każdym dokumencie i jakie typy danych przechowujesz w tych polach. Dokumenty w tej samej kolekcji mogą zawierać różne pola lub przechowywać w tych polach różne typy danych. Dobrym pomysłem jest jednak używanie tych samych pól i typów danych w wielu dokumentach, co ułatwi tworzenie zapytań dotyczących dokumentów.
Kolekcja zawiera dokumenty i nic więcej. Nie może bezpośrednio zawierać nieprzetworzonych pól z wartościami ani innych kolekcji. (Zobacz Dane hierarchiczne , aby dowiedzieć się, jak uporządkować 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 tworzenie losowych identyfikatorów.
Nie musisz „tworzyć” ani „usuwać” kolekcji. Po utworzeniu pierwszego dokumentu w kolekcji kolekcja istnieje. Jeśli usuniesz wszystkie dokumenty w kolekcji, przestanie ona istnieć.
Bibliografia
Każdy dokument w Cloud Firestore jest jednoznacznie identyfikowany na podstawie jego lokalizacji w bazie danych. Poprzedni przykład alovelace
dokument znajdujący się w kolekcji users
. Aby odwołać się do tej lokalizacji w kodzie, możesz utworzyć do niej odwołanie .
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
Aby uzyskać więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore, zapoznaj się z Bibliotekami klienta Cloud Firestore .
Jedność
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Aby uzyskać więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore, zapoznaj się z Bibliotekami klienta Cloud Firestore .
Rubin
Odniesienie to lekki obiekt, który po prostu wskazuje lokalizację w bazie danych. Odniesienie można utworzyć niezależnie od tego, czy istnieją tam dane, 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
Aby uzyskać więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore, zapoznaj się z Bibliotekami klienta Cloud Firestore .
Jedność
CollectionReference collectionRef = db.Collection("users");
C#
C#
Aby uzyskać więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore, zapoznaj się z Bibliotekami klienta Cloud Firestore .
Rubin
Dla wygody można również tworzyć odwołania, określając ścieżkę do dokumentu lub kolekcji jako ciąg, z komponentami ścieżki oddzielonymi ukośnikiem ( /
). Na przykład, aby utworzyć odwołanie 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
Aby uzyskać więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore, zapoznaj się z Bibliotekami klienta Cloud Firestore .
Jedność
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Aby uzyskać więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore, zapoznaj się z Bibliotekami klienta Cloud Firestore .
Rubin
Dane hierarchiczne
Aby zrozumieć, jak działają hierarchiczne struktury danych w Cloud Firestore, rozważ przykładową aplikację czatu z wiadomościami i pokojami rozmów.
Możesz utworzyć kolekcję o nazwie rooms
do przechowywania różnych pokojów rozmów:
sala
Aname : "my chat room"
sala
B...
Teraz, gdy masz 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 kolekcje podrzędne.
Podkolekcje
Najlepszym sposobem przechowywania komunikatów w tym scenariuszu jest użycie podkolekcji. Podkolekcja to kolekcja powiązana z określonym dokumentem.
Możesz utworzyć podkolekcję o nazwie messages
dla każdego dokumentu pokoju w swojej kolekcji rooms
:
sala
Aname : "my chat room"
wiadomość
1from : "alex"
msg : "Hello World!"
wiadomość
2...
sala
B...
W tym przykładzie utworzyłbyś odwołanie do wiadomości w podzbiorze z następującym kodem:
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
Aby uzyskać więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore, zapoznaj się z Bibliotekami klienta Cloud Firestore .
Jedność
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
Aby uzyskać więcej informacji na temat instalowania i tworzenia klienta Cloud Firestore, zapoznaj się z Bibliotekami klienta Cloud Firestore .
Rubin
Zwróć uwagę na naprzemienny układ zbiorów i dokumentów. Twoje kolekcje 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, ułatwiając dostęp do danych. Aby uzyskać wszystkie wiadomości w roomA
, możesz utworzyć odniesienie do kolekcji do messages
podzbioru i wchodzić z nim w interakcję, tak jak z każdym innym odniesieniem do kolekcji.
Dokumenty w podkolekcjach mogą również zawierać podkolekcje, co pozwala na dalsze zagnieżdżanie danych. Możesz zagnieżdżać dane do 100 poziomów w głąb.