Cloud Firestore è un database NoSQL orientato ai documenti. A differenza di un database SQL, non ci sono tabelle o righe. I dati vengono invece archiviati in documenti, che sono organizzate in raccolte.
Ogni documento contiene un insieme di coppie chiave-valore. Cloud Firestore è e ottimizzato per l'archiviazione di grandi raccolte di piccoli documenti.
Tutti i documenti devono essere archiviati in raccolte. I documenti possono contenere sottoraccolte e oggetti nidificati, che possono includere entrambi campi primitivi come stringhe o oggetti complessi come gli elenchi.
Le raccolte e i documenti vengono creati implicitamente in Cloud Firestore. È sufficiente assegnare i dati a un documento all'interno di una raccolta. Se la raccolta o il documento non esistono, Cloud Firestore li crea.
Documenti
In Cloud Firestore, l'unità di archiviazione è il documento. Un documento è un un record leggero contenente campi mappati a valori. Ogni documento è identificati da un nome.
Un documento che rappresenta l'utente alovelace
potrebbe avere il seguente aspetto:
bacio
first : "Ada"
last : "Lovelace"
born : 1815
Gli oggetti complessi e nidificati in un documento sono chiamati mappe. Ad esempio, potresti strutturare il nome dell'utente dell'esempio precedente con una mappa, come questa:
bacio
name :
first : "Ada"
last : "Lovelace"
born : 1815
Potresti notare che i documenti sembrano molto simili a JSON. In sostanza, lo sono. Esistono alcune differenze (ad esempio, i documenti supportano tipi di dati aggiuntivi e hanno dimensioni limitate a 1 MB), ma in generale, puoi trattare i documenti come e creare record JSON leggeri.
Raccolte
I documenti risiedono in raccolte, che sono semplicemente container di documenti. Ad esempio, potresti avere una raccolta users
per contenere i vari utenti, ciascuno rappresentato da un documento:
utenti
bacio
first : "Ada"
last : "Lovelace"
born : 1815
in tour
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore è senza schema, quindi hai completa libertà su quali campi inserire in ogni documento e su quali tipi di dati memorizzare in questi campi. I documenti all'interno della stessa raccolta possono contenere tutti campi o archivi diversi diversi tipi di dati in questi campi. Tuttavia, è una buona idea utilizzare gli stessi campi e tipi di dati in più documenti, in modo da poter eseguire query documenti più facilmente.
Una raccolta contiene documenti e nient'altro. Non può contenere direttamente i dati non elaborati campi con valori e non può contenere altre raccolte. (Consulta la sezione Dati gerarchici per una spiegazione su come strutturare i dati più complessi in Cloud Firestore.)
I nomi dei documenti all'interno di una raccolta sono univoci. Puoi fornire le tue chiavi, ad esempio gli ID utente, oppure puoi lasciare che sia Cloud Firestore a creare automaticamente ID casuali per te.
Non è necessario "creare" o "elimina" raccolte. Dopo aver creato la prima documento in una raccolta, la raccolta esiste. Se elimini tutti i documenti in una raccolta, non esiste più.
Riferimenti
Ogni documento in Cloud Firestore è identificato in modo univoco dalla sua posizione
all'interno del database. L'esempio precedente mostrava un documento alovelace
all'interno di
la raccolta users
. Per fare riferimento a questa località nel tuo codice, puoi creare un
riferimento.
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
Vai
PHP
PHP
Per saperne di più sull'installazione e sulla creazione di un client Cloud Firestore, consulta Librerie client di Cloud Firestore.
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Per saperne di più sull'installazione e sulla creazione di un client Cloud Firestore, consulta Librerie client di Cloud Firestore.
Ruby
Un riferimento è un oggetto leggero che punta a una posizione nel tuo per configurare un database. Puoi creare un riferimento indipendentemente dal fatto che esista o meno dei dati al suo interno la creazione di un riferimento non esegue alcuna operazione di rete.
Puoi anche creare riferimenti alle raccolte:
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
Vai
PHP
PHP
Per saperne di più sull'installazione e sulla creazione di un client Cloud Firestore, consulta Librerie client di Cloud Firestore.
Unity
CollectionReference collectionRef = db.Collection("users");
C#
C#
Per saperne di più sull'installazione e sulla creazione di un client Cloud Firestore, consulta Librerie client Cloud Firestore.
Ruby
Per praticità, puoi anche creare riferimenti specificando il percorso di un
documento o raccolta come stringa, con i componenti del percorso separati da un
barra (/
). Ad esempio, per creare un riferimento al documento 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
Vai
PHP
PHP
Per saperne di più sull'installazione e sulla creazione di un client Cloud Firestore, consulta Librerie client di Cloud Firestore.
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Per saperne di più sull'installazione e sulla creazione di un client Cloud Firestore, consulta Librerie client Cloud Firestore.
Ruby
Dati gerarchici
Per comprendere come funzionano le strutture di dati gerarchiche in Cloud Firestore, Prendi in considerazione un'app di chat di esempio con messaggi e stanze virtuali.
Puoi creare una raccolta denominata rooms
per archiviare diverse stanze virtuali:
stanze
stanzaA
name : "my chat room"
roomB
...
Ora che hai le stanze virtuali, decidi come archiviare i tuoi messaggi. Potresti non nel documento della chat room. Documenti in Cloud Firestore dovrebbe essere leggero e una chat room potrebbe contenere un gran numero di messaggi. Tuttavia, puoi creare raccolte aggiuntive all'interno del documento della stanza virtuale, come sottoraccolte.
Raccolte secondarie
Il modo migliore per archiviare i messaggi in questo scenario è utilizzare le sottoraccolte. R una sottoraccolta è una raccolta associata a un documento specifico.
Puoi creare una sottoraccolta denominata messages
per ogni documento della stanza in
la tua raccolta rooms
:
stanze
roomA
name : "my chat room"
messaggi
message1
from : "alex"
msg : "Hello World!"
message2
...
roomB
...
In questo esempio, creerai un riferimento a un messaggio nella sottoraccolta con il seguente codice:
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
Vai
PHP
PHP
Per saperne di più sull'installazione e sulla creazione di un client Cloud Firestore, consulta Librerie client di Cloud Firestore.
Unity
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
Per saperne di più sull'installazione e sulla creazione di un client Cloud Firestore, consulta Librerie client di Cloud Firestore.
Ruby
Nota il pattern alternato di raccolte e documenti. Le tue raccolte e documenti devono sempre seguire questo schema. Non puoi fare riferimento a una raccolta in una raccolta o un documento in un documento.
Le sottoraccolte consentono di strutturare i dati in modo gerarchico, semplificando
l'accesso. Per ricevere tutti i messaggi in roomA
, puoi creare un riferimento per la raccolta
alla sottoraccolta messages
e interagisci con quest'ultima come faresti con
riferimento alla raccolta.
I documenti nelle sottoraccolte possono contenere anche sottoraccolte, il che ti consente di nidificare ulteriormente i dati. Puoi nidificare i dati fino a 100 livelli.