获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

Modèle de données Cloud Firestore

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 :

  • 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 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 d' users pour contenir vos différents utilisateurs, chacun représenté par un document :

  • utilisateurs

    • alovelace

      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.

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 version 9

import { doc } from "firebase/firestore";

const alovelaceDocumentRef = doc(db, 'users', 'alovelace');

Web version 8

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"];

Java

DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");

Kotlin+KTX

val 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(u'users').document(u'alovelace')

Python

a_lovelace_ref = db.collection("users").document("alovelace")
C++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
Node.js
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
Aller
alovelaceRef := client.Collection("users").Doc("alovelace")
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 .

$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 clientes 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 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 version 9

import { collection } from "firebase/firestore";

const usersCollectionRef = collection(db, 'users');

Web version 8

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"];

Java

CollectionReference usersCollectionRef = db.collection("users");

Kotlin+KTX

val 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(u'users')

Python

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Aller
usersRef := client.Collection("users")
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 .

$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 clientes 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, 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 version 9

import { doc } from "firebase/firestore"; 

const alovelaceDocumentRef = doc(db, 'users/alovelace');

Web version 8

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"];

Java

DocumentReference alovelaceDocumentRef = db.document("users/alovelace");

Kotlin+KTX

val 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(u'users/alovelace')

Python

a_lovelace_ref = db.document("users/alovelace")
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Aller
// Reference to a document with id "alovelace" in the collection "users"
alovelaceRef := client.Doc("users/alovelace")
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 .

$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 clientes 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, 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 :

  • salles

    • salle classeA

      name : "my chat room"

    • salle classeB

      ...

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 de rooms :

  • salles

    • salle classeA

      name : "my chat room"

      • messages

        • message

          from : "alex"
          msg : "Hello World!"

        • message classe2

          ...

    • salle classeB

      ...

Dans cet exemple, vous créeriez une référence à un message dans la sous-collection avec le code suivant :

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');
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"];

Java

DocumentReference messageRef = db
        .collection("rooms").document("roomA")
        .collection("messages").document("message1");

Kotlin+KTX

val 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(u'rooms').document(u'roomA')
message_ref = room_a_ref.collection(u'messages').document(u'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");
Node.js
const messageRef = db.collection('rooms').doc('roomA')
  .collection('messages').doc('message1');
Aller
messageRef := client.Collection("rooms").Doc("roomA").
	Collection("messages").Doc("message1")
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 .

$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 clientes 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 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.