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 organizzati in raccolte .
Ogni documento contiene un insieme di coppie chiave-valore. Cloud Firestore è ottimizzato per l'archiviazione di grandi raccolte di piccoli documenti.
Tutti i documenti devono essere conservati in collezioni. I documenti possono contenere sottoraccolte e oggetti nidificati, entrambi i quali possono includere campi primitivi come stringhe o oggetti complessi come elenchi.
Raccolte e documenti vengono creati implicitamente in Cloud Firestore. Assegna semplicemente i dati a un documento all'interno di una raccolta. Se la raccolta o il documento non esiste, Cloud Firestore lo crea.
Documenti
In Cloud Firestore, l'unità di archiviazione è il documento. Un documento è un record leggero che contiene campi che corrispondono a valori. Ogni documento è identificato da un nome.
Un documento che rappresenta un utente alovelace
potrebbe avere questo aspetto:
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 dall'esempio precedente con una mappa, in questo modo:
name :
first : "Ada"
last : "Lovelace"
born : 1815
Potresti notare che i documenti assomigliano molto a JSON. In effetti, fondamentalmente lo sono. Esistono alcune differenze (ad esempio, i documenti supportano tipi di dati aggiuntivi e hanno dimensioni limitate a 1 MB), ma in generale è possibile trattare i documenti come record JSON leggeri.
Collezioni
I documenti vivono in collezioni, che sono semplicemente contenitori per documenti. Ad esempio, potresti avere una raccolta users
per contenere i vari utenti, ciascuno rappresentato da un documento:
first : "Ada"
last : "Lovelace"
born : 1815
corso di
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore è senza schema, quindi hai completa libertà su quali campi inserire in ciascun documento e quali tipi di dati archiviare in tali campi. Tutti i documenti all'interno della stessa raccolta possono contenere campi diversi o memorizzare diversi tipi di dati in tali campi. Tuttavia, è consigliabile utilizzare gli stessi campi e tipi di dati in più documenti, in modo da poter interrogare i documenti più facilmente.
Una raccolta contiene documenti e nient'altro. Non può contenere direttamente campi non elaborati con valori e non può contenere altre raccolte. (Vedi Dati gerarchici per una spiegazione su come strutturare dati più complessi in Cloud Firestore.)
I nomi dei documenti all'interno di una raccolta sono univoci. Puoi fornire le tue chiavi, come gli ID utente, oppure lasciare che Cloud Firestore crei automaticamente ID casuali per te.
Non è necessario "creare" o "eliminare" raccolte. Dopo aver creato il primo documento in una raccolta, la raccolta esiste. Se elimini tutti i documenti in una raccolta, questa 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 della raccolta users
. Per fare riferimento a questa posizione nel codice, puoi creare un riferimento ad essa.
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web version 8
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Rapido
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Obiettivo-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");
Giava
Pitone
Python
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
Andare
PHP
PHP
Per ulteriori informazioni sull'installazione e la creazione di un client Cloud Firestore, fai riferimento a Librerie client Cloud Firestore .
Unità
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Per ulteriori informazioni sull'installazione e la creazione di un client Cloud Firestore, fai riferimento a Librerie client Cloud Firestore .
Rubino
Un riferimento è un oggetto leggero che punta solo a una posizione nel database. È possibile creare un riferimento indipendentemente dal fatto che i dati esistano lì e la creazione di un riferimento non esegue alcuna operazione di rete.
Puoi anche creare riferimenti alle raccolte :
Web version 9
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web version 8
var usersCollectionRef = db.collection('users');
Rapido
let usersCollectionRef = db.collection("users")
Obiettivo-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");
Giava
Pitone
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
Andare
PHP
PHP
Per ulteriori informazioni sull'installazione e la creazione di un client Cloud Firestore, fai riferimento a Librerie client Cloud Firestore .
Unità
CollectionReference collectionRef = db.Collection("users");
C#
C#
Per ulteriori informazioni sull'installazione e la creazione di un client Cloud Firestore, fai riferimento a Librerie client Cloud Firestore .
Rubino
Per praticità, puoi anche creare riferimenti specificando il percorso di un documento o di una raccolta come stringa, con i componenti del percorso separati da una barra ( /
). Ad esempio, per creare un riferimento al documento alovelace
:
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web version 8
var alovelaceDocumentRef = db.doc('users/alovelace');
Rapido
let aLovelaceDocumentReference = db.document("users/alovelace")
Obiettivo-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");
Giava
Pitone
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
Andare
PHP
PHP
Per ulteriori informazioni sull'installazione e la creazione di un client Cloud Firestore, fai riferimento a Librerie client Cloud Firestore .
Unità
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Per ulteriori informazioni sull'installazione e la creazione di un client Cloud Firestore, fai riferimento a Librerie client Cloud Firestore .
Rubino
Dati gerarchici
Per capire come funzionano le strutture di dati gerarchiche in Cloud Firestore, considera un'app di chat di esempio con messaggi e chat room.
Puoi creare una raccolta chiamata rooms
per archiviare diverse chat room:
name : "my chat room"
...
Ora che hai le chat room, decidi come archiviare i tuoi messaggi. Potresti non volerli archiviare nel documento della chat room. I documenti in Cloud Firestore dovrebbero essere leggeri e una chat room potrebbe contenere un numero elevato di messaggi. Tuttavia, puoi creare raccolte aggiuntive all'interno del documento della tua chat room, come sottoraccolte.
Sottoraccolte
Il modo migliore per archiviare i messaggi in questo scenario consiste nell'utilizzare sottoraccolte. Una sottoraccolta è una raccolta associata a un documento specifico.
Puoi creare una sottoraccolta chiamata messages
per ogni documento della stanza nella tua raccolta rooms
:
name : "my chat room"
messaggio
from : "alex"
msg : "Hello World!"
messaggio
...
...
In questo esempio, creerai un riferimento a un messaggio nella sottoraccolta con il seguente codice:
Web version 9
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Web version 8
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
Rapido
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Obiettivo-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");
Giava
Pitone
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
Andare
PHP
PHP
Per ulteriori informazioni sull'installazione e la creazione di un client Cloud Firestore, fai riferimento a Librerie client Cloud Firestore .
Unità
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
Per ulteriori informazioni sull'installazione e la creazione di un client Cloud Firestore, fai riferimento a Librerie client Cloud Firestore .
Rubino
Si noti lo schema alternato di raccolte e documenti. Le tue raccolte e i tuoi documenti devono sempre seguire questo schema. Non è possibile fare riferimento a una raccolta in una raccolta oa un documento in un documento.
Le sottoraccolte consentono di strutturare i dati in modo gerarchico, facilitando l'accesso ai dati. Per ottenere tutti i messaggi in roomA
, puoi creare un riferimento alla raccolta ai messages
della sottoraccolta e interagire con esso come faresti con qualsiasi altro riferimento alla raccolta.
I documenti nelle sottoraccolte possono contenere anche sottoraccolte, consentendo di nidificare ulteriormente i dati. Puoi nidificare i dati fino a 100 livelli di profondità.