Modèle de données Cloud Firestore

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 conservé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 mappés à des valeurs. Chaque document est identifié par un nom.

Un document représentant un utilisateur alovelace pourrait ressembler à ceci :

  • alovelace

    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 :

  • alovelace

    name :
    first : "Ada"
    last : "Lovelace"
    born : 1815

Vous remarquerez peut-être que les documents ressemblent beaucoup à JSON. En fait, ils le sont fondamentalement. Il existe quelques différences (par exemple, les documents prennent en charge des types de données supplémentaires et sont limités en taille à 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 contenant vos différents utilisateurs, chacun représenté par un document :

  • utilisateurs

    • alovelace

      first : "Ada"
      last : "Lovelace"
      born : 1815

    • de maturité

      first : "Alan"
      last : "Turing"
      born : 1912

Cloud Firestore est sans schéma, vous disposez donc d'une liberté totale sur les champs que vous insérez 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, 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, ni 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 au sein d'une collection sont uniques. Vous pouvez fournir vos propres clés, telles que des identifiants utilisateur, ou laisser Cloud Firestore créer automatiquement des identifiants aléatoires pour vous.

Vous n'avez pas besoin de « créer » ou de « supprimer » des collections. Après avoir 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
Remarque : ce produit n'est pas disponible sur les cibles watchOS et App Clip.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objectif c
Remarque : ce produit n'est pas disponible sur les cibles watchOS et App Clip.
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
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
Python
a_lovelace_ref = db.collection("users").document("alovelace")

Python

a_lovelace_ref = db.collection("users").document("alovelace")
C++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
Noeud.js
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
Aller

import (
	"cloud.google.com/go/firestore"
)

func createDocReference(client *firestore.Client) {

	alovelaceRef := client.Collection("users").Doc("alovelace")

	_ = alovelaceRef
}
PHP

PHP

Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques client Cloud Firestore .

$document = $db->collection('samples/php/users')->document('alovelace');
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 client Cloud Firestore .

DocumentReference documentRef = db.Collection("users").Document("alovelace");
Rubis
document_ref = firestore.col("users").doc("alovelace")

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 existent 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
Remarque : ce produit n'est pas disponible sur les cibles watchOS et App Clip.
let usersCollectionRef = db.collection("users")
Objectif c
Remarque : ce produit n'est pas disponible sur les cibles watchOS et App Clip.
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
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Python
users_ref = db.collection("users")

Python

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Noeud.js
const usersCollectionRef = db.collection('users');
Aller

import (
	"cloud.google.com/go/firestore"
)

func createCollectionReference(client *firestore.Client) {
	usersRef := client.Collection("users")

	_ = usersRef
}
PHP

PHP

Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques client Cloud Firestore .

$collection = $db->collection('samples/php/users');
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 client Cloud Firestore .

CollectionReference collectionRef = db.Collection("users");
Rubis
collection_ref = firestore.col "users"

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, les composants du chemin étant 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
Remarque : ce produit n'est pas disponible sur les cibles watchOS et App Clip.
let aLovelaceDocumentReference = db.document("users/alovelace")
Objectif c
Remarque : ce produit n'est pas disponible sur les cibles watchOS et App Clip.
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
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
Python
a_lovelace_ref = db.document("users/alovelace")

Python

a_lovelace_ref = db.document("users/alovelace")
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Noeud.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Aller

import (
	"cloud.google.com/go/firestore"
)

func createDocReferenceFromString(client *firestore.Client) {
	// Reference to a document with id "alovelace" in the collection "users"
	alovelaceRef := client.Doc("users/alovelace")

	_ = alovelaceRef
}
PHP

PHP

Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques client Cloud Firestore .

$document = $db->document('users/alovelace');
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 client Cloud Firestore .

DocumentReference documentRef = db.Document("users/alovelace");
Rubis
document_path_ref = firestore.doc "users/alovelace"

Données hiérarchiques

Pour comprendre le fonctionnement des structures de données hiérarchiques dans Cloud Firestore, prenons un exemple d'application de chat avec des messages et des salles de discussion.

Vous pouvez créer une collection appelée rooms pour stocker différentes salles de discussion :

  • salles

    • salle

      name : "my chat room"

    • salle

      ...

Maintenant que vous disposez de salons de discussion, décidez comment stocker vos messages. Vous ne souhaiterez peut-être pas les stocker dans le document du salon 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 les 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 :

  • salles

    • 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
Remarque : ce produit n'est pas disponible sur les cibles watchOS et App Clip.
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
Objectif c
Remarque : ce produit n'est pas disponible sur les cibles watchOS et App Clip.
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
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
Python
room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")

Python

room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")
C++
DocumentReference message_reference = db->Collection("rooms")
    .Document("roomA")
    .Collection("messages")
    .Document("message1");
Noeud.js
const messageRef = db.collection('rooms').doc('roomA')
  .collection('messages').doc('message1');
Aller

import (
	"cloud.google.com/go/firestore"
)

func createSubcollectionReference(client *firestore.Client) {
	messageRef := client.Collection("rooms").Doc("roomA").
		Collection("messages").Doc("message1")

	_ = messageRef
}
PHP

PHP

Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, reportez-vous à Bibliothèques client Cloud Firestore .

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
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 client Cloud Firestore .

DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
Rubis
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

Remarquez le modèle alterné 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 leur accès. 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.