Cloud Firestore est une base de données NoSQL orientée documents. Contrairement à une base de données SQL, il n'y a ni tables ni lignes. Au lieu de cela, vous stockez les données dans des documents , qui sont organisés en collections .
Chaque document contient un ensemble de paires clé-valeur. Cloud Firestore est optimisé pour stocker de grandes collections de petits documents.
Tous les documents doivent être stockés dans des collections. Les documents peuvent contenir des sous-collections et des objets imbriqués, qui peuvent tous deux inclure des champs primitifs comme des chaînes ou des objets complexes comme des listes.
Les collections et les documents sont créés implicitement dans Cloud Firestore. Attribuez simplement des données à un document au sein d'une collection. Si la collection ou le document n'existe pas, Cloud Firestore le crée.
Documents
Dans Cloud Firestore, l'unité de stockage est le document. Un document est un enregistrement léger qui contient des champs, qui correspondent à des valeurs. Chaque document est identifié par un nom.
Un document représentant un utilisateur alovelace
pourrait ressembler à ceci :
first : "Ada"
last : "Lovelace"
born : 1815
Les objets complexes imbriqués dans un document sont appelés cartes. Par exemple, vous pouvez structurer le nom de l'utilisateur de l'exemple ci-dessus avec une carte, comme ceci :
name :
first : "Ada"
last : "Lovelace"
born : 1815
Vous remarquerez peut-être que les documents ressemblent beaucoup à JSON. En fait, ils le sont essentiellement. Il existe quelques différences (par exemple, les documents prennent en charge des types de données supplémentaires et leur taille est limitée à 1 Mo), mais en général, vous pouvez traiter les documents comme des enregistrements JSON légers.
Collections
Les documents vivent dans des collections, qui sont simplement des conteneurs de documents. Par exemple, vous pourriez avoir une collection users
pour contenir vos différents utilisateurs, chacun représenté par un document :
utilisateurs
first : "Ada"
last : "Lovelace"
born : 1815
maturation
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore est sans schéma, vous avez donc une totale liberté sur les champs que vous placez dans chaque document et sur les types de données que vous stockez dans ces champs. Les documents d'une même collection peuvent tous contenir des champs différents ou stocker différents types de données dans ces champs. Cependant, il est conseillé d'utiliser les mêmes champs et types de données dans plusieurs documents, afin de pouvoir interroger les documents plus facilement.
Une collection contient des documents et rien d'autre. Il ne peut pas contenir directement des champs bruts avec des valeurs et il ne peut pas contenir d'autres collections. (Voir Données hiérarchiques pour une explication sur la façon de structurer des données plus complexes dans Cloud Firestore.)
Les noms des documents d'une collection sont uniques. Vous pouvez fournir vos propres clés, telles que des ID utilisateur, ou vous pouvez laisser Cloud Firestore créer automatiquement des ID aléatoires pour vous.
Vous n'avez pas besoin de "créer" ou de "supprimer" des collections. Une fois que vous avez créé le premier document d'une collection, la collection existe. Si vous supprimez tous les documents d'une collection, celle-ci n'existe plus.
Les références
Chaque document dans Cloud Firestore est identifié de manière unique par son emplacement dans la base de données. L'exemple précédent montrait un document alovelace
au sein de la collection users
. Pour faire référence à cet emplacement dans votre code, vous pouvez créer une référence à celui-ci.
Web modular API
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web namespaced API
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Rapide
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objectif 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
Aller
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Unité
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
C#
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Rubis
Une référence est un objet léger qui pointe simplement vers un emplacement dans votre base de données. Vous pouvez créer une référence, que des données y soient présentes ou non, et la création d'une référence n'effectue aucune opération réseau.
Vous pouvez également créer des références à des collections :
Web modular API
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web namespaced API
var usersCollectionRef = db.collection('users');
Rapide
let usersCollectionRef = db.collection("users")
Objectif 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
Aller
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Unité
CollectionReference collectionRef = db.Collection("users");
C#
C#
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Rubis
Pour plus de commodité, vous pouvez également créer des références en spécifiant le chemin d'accès à un document ou à une collection sous forme de chaîne, avec des composants de chemin séparés par une barre oblique ( /
). Par exemple, pour créer une référence au document alovelace
:
Web modular API
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web namespaced API
var alovelaceDocumentRef = db.doc('users/alovelace');
Rapide
let aLovelaceDocumentReference = db.document("users/alovelace")
Objectif 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
Aller
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Unité
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Rubis
Données hiérarchiques
Pour comprendre le fonctionnement des structures de données hiérarchiques dans Cloud Firestore, considérons un exemple d'application de chat avec des messages et des salles de chat.
Vous pouvez créer une collection appelée rooms
pour stocker différentes salles de discussion :
salle
name : "my chat room"
salle
...
Maintenant que vous avez des salons de discussion, décidez comment stocker vos messages. Vous ne voudrez peut-être pas les stocker dans le document de la salle de discussion. Les documents dans Cloud Firestore doivent être légers et une salle de discussion peut contenir un grand nombre de messages. Cependant, vous pouvez créer des collections supplémentaires dans le document de votre salle de discussion, en tant que sous-collections.
Sous-collections
La meilleure façon de stocker des messages dans ce scénario consiste à utiliser des sous-collections. Une sous-collection est une collection associée à un document spécifique.
Vous pouvez créer une sous-collection appelée messages
pour chaque document de salle de votre collection rooms
:
salle
name : "my chat room"
messages
message
from : "alex"
msg : "Hello World!"
message
...
salle
...
Dans cet exemple, vous créeriez une référence à un message dans la sous-collection avec le code suivant :
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');
Rapide
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Objectif 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
Aller
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Unité
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
C#
C#
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques clientes Cloud Firestore .
Rubis
Remarquez l'alternance des collections et des documents. Vos collections et documents doivent toujours suivre ce modèle. Vous ne pouvez pas référencer une collection dans une collection ou un document dans un document.
Les sous-collections vous permettent de structurer les données de manière hiérarchique, ce qui facilite l'accès aux données. Pour obtenir tous les messages dans roomA
, vous pouvez créer une référence de collection aux messages
de la sous-collection et interagir avec elle comme vous le feriez avec n'importe quelle autre référence de collection.
Les documents des sous-collections peuvent également contenir des sous-collections, ce qui vous permet d'imbriquer davantage les données. Vous pouvez imbriquer des données jusqu'à 100 niveaux de profondeur.