Cloud Firestore est une base de données NoSQL orientée document. 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 être constitués de champs de données élémentaires, tels que des chaînes, ou d'objets complexes, tels que des listes.
Les collections et les documents sont créés de manière implicite dans Cloud Firestore. Il vous suffit d'attribuer des données à un document au sein d'une collection. Si la collection ou le document n'existent pas, Cloud Firestore les crée.
Documents
Dans Cloud Firestore, l'unité de stockage est le document. Un document est un enregistrement de données allégé qui contient des champs correspondant à des valeurs. Chaque document est identifié par un nom.
Voici un exemple de document représentant un utilisateur alovelace :
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
Les objets complexes imbriqués dans un document sont appelés cartes. Ainsi, dans l'exemple ci-dessus, vous pouvez structurer le nom de l'utilisateur à l'aide d'une carte, comme ceci :
alovelace
name :
first : "Ada"
last : "Lovelace"
born : 1815
Vous remarquerez peut-être que les documents ressemblent beaucoup à du JSON. C'est parce qu'ils sont basés sur ce format. Il existe quelques différences (par exemple, les documents acceptent des types de données supplémentaires et sont limités à la limite de taille des documents), mais en général, vous pouvez considérer les documents comme des enregistrements JSON légers.
Collections

Les documents se trouvent dans des collections, qui sont de simples conteneurs. Par exemple, vous pouvez créer une collection users pour accueillir vos différents utilisateurs, chacun représenté par un document :
users
alovelace
first : "Ada"
last : "Lovelace"
born : 1815aturing
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore est sans schéma. Vous avez donc une totale liberté quant aux champs que vous insérez dans chaque document et aux 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. Toutefois, lorque vous créez plusieurs documents, il est conseillé d'utiliser des champs et types de données similaires afin de pouvoir plus facilement effectuer des requêtes sur l'ensemble.
Une collection ne contient rien d'autre que des documents. Elle ne peut pas contenir directement de champs bruts associés à des valeurs ni contenir d'autres collections. (Pour savoir comment structurer des données plus complexes dans Cloud Firestore, consultez Données hiérarchiques.)
Les noms des documents d'une collection doivent être uniques. Vous pouvez fournir vos propres clés, comme des ID utilisateur, ou laisser Cloud Firestore créer automatiquement des ID aléatoires pour vous.
Il n'est pas nécessaire de créer ou de supprimer des collections. Une collection existe dès lors qu'un premier document y est créé. Si vous supprimez tous les documents d'une collection, elle n'existe plus.
Références
Chaque document de 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 dans la collection users. Pour faire référence à cet emplacement dans votre code, vous pouvez créer une référence.
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
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
Go
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, consultez Bibliothèques clientes Cloud Firestore.
Unity
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, consultez Bibliothèques clientes Cloud Firestore.
Ruby
Une référence est un objet léger qui pointe simplement vers un emplacement de votre base de données. Vous pouvez créer une référence même s'il n'existe aucune donnée. La création d'une référence n'exécute aucune opération réseau.
Vous pouvez également créer des références à des collections :
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
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
Go
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, consultez Bibliothèques clientes Cloud Firestore.
Unity
CollectionReference collectionRef = db.Collection("users");
C#
C#
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, consultez Bibliothèques clientes Cloud Firestore.
Ruby
Pour des raisons pratiques, vous avez également la possibilité de créer des références en spécifiant le chemin d'accès d'un document ou d'une collection sous forme de chaîne dont les éléments sont séparés par une barre oblique (/). Par exemple, voici comment créer une référence au document 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
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
Go
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, consultez Bibliothèques clientes Cloud Firestore.
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#
C#
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, consultez Bibliothèques clientes Cloud Firestore.
Ruby
Données hiérarchiques
Pour comprendre le fonctionnement des structures de données hiérarchiques dans Cloud Firestore, prenons l'exemple d'une application de chat avec des messages et des salons de discussion.
Vous pouvez créer une collection appelée rooms pour stocker différents salons de discussion :
rooms
roomA
name : "my chat room"roomB
...
Maintenant que vous avez créé une collection de salons de discussion, choisissez comment stocker les messages. Il serait préférable de ne pas les stocker dans le document du salon de discussion, Les documents dans Cloud Firestore doivent être légers, et un salon de discussion peut contenir un grand nombre de messages. Toutefois, vous pouvez créer des collections supplémentaires dans le document de votre salon de discussion, sous la forme de sous-collections.
Sous-collections
Dans ce cas de figure, le meilleur moyen de stocker les messages consiste à utiliser des sous-collections. Une sous-collection est une collection associée à un document spécifique.
Dans votre collection rooms, vous pouvez créer une sous-collection appelée messages pour chaque document de salon de discussion :
rooms
roomA
name : "my chat room"messages
message1
from : "alex"
msg : "Hello World!"message2
...
roomB
...
Dans cet exemple, une référence à un message de la sous-collection est créée à l'aide du code suivant :
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
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
Go
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, consultez Bibliothèques clientes Cloud Firestore.
Unity
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, consultez Bibliothèques clientes Cloud Firestore.
Ruby
Notez l'alternance des collections et des documents. Vos collections et vos documents doivent toujours respecter ce format. Vous ne pouvez pas référencer de collection dans une collection ou de document dans un document.
Les sous-collections vous permettent de structurer les données de manière hiérarchique pour les rendre plus accessibles. Pour obtenir tous les messages dans roomA, vous pouvez créer une référence à une sous-collection messages, puis interagir avec elle comme vous le feriez avec toute autre référence à une collection.
Les documents des sous-collections peuvent également contenir des sous-collections, ce qui vous permet d'imbriquer davantage de données. Vous pouvez imbriquer jusqu'à 100 niveaux de données.