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. À la place, vous stockez les données dans des documents organisés en collections.
Chaque document contient un ensemble de paires clé/valeur. Cloud Firestore correspond à optimisé pour le stockage 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.
Dans Cloud Firestore, les collections et les documents sont créés implicitement. Il vous suffit d'attribuer 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 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. Même si des différences existent (par exemple, les documents acceptent davantage de types de données et leur taille est limitée à 1 Mo), vous pouvez généralement considérer que les documents sont des enregistrements JSON allégés.
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 : 1815
aturing
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore étant sans schéma, vous êtes libre de choisir les champs que vous placez dans chaque document et 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. 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 plus d'informations sur la façon de structurer des données plus complexes dans Cloud Firestore, consultez la page Données hiérarchiques.
Les noms des documents d'une collection doivent être uniques. Vous pouvez fournir vos propres clés, telles que les ID utilisateur, ou vous pouvez autoriser Cloud Firestore à créer des ID aléatoires automatiquement.
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
Dans Cloud Firestore, chaque document est identifiable de manière unique en fonction de sa position dans la base de données. L'exemple précédent présentait un document alovelace
placé dans la collection users
. Pour faire référence à ce lieu dans votre code, vous pouvez créer un
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+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
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+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
Go
PHP
PHP
Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, consultez la page 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+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
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 contenant 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, Documents dans Cloud Firestore doit être léger, 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+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
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.