Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

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 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 tels que des chaînes ou des objets complexes tels que des listes.

Les collections et les documents sont créés implicitement dans Cloud Firestore. Attribuez simplement des données à un document dans une collection. Si la collection ou le document n'existe pas, Cloud Firestore le crée.

Des 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 alovelace utilisateur pourrait ressembler à ceci:

  • alovelace de

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

Les objets complexes et imbriqués dans un document sont appelés des cartes. Par exemple, vous pouvez structurer le nom de l'utilisateur à partir de l'exemple ci-dessus avec une carte, comme ceci:

  • alovelace de

    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.

Les collections

Les documents vivent dans des collections, qui sont simplement des conteneurs pour les documents. Par exemple, vous pouvez avoir une collection d' users pour contenir vos différents utilisateurs, chacun représenté par un document:

  • utilisateurs de

    • alovelace de

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

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

Cloud Firestore est sans schéma, vous avez donc une totale liberté sur les champs que vous mettez 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. Cependant, il est judicieux 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. (Consultez Données hiérarchiques pour savoir comment 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 les 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 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 les users la collection. Pour faire référence à cet emplacement dans votre code, vous pouvez créer une référence à celui-ci.

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

Java

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

Kotlin + KTX

val alovelaceDocumentRef = db.collection("users").document("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')
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
$document = $db->collection('users')->document('lovelace');
Unité
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C #
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, qu'il y ait ou non des données, 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 :

la toile
var usersCollectionRef = db.collection('users');
Rapide
let usersCollectionRef = db.collection("users")
Objectif c
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];

Java

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

Kotlin + KTX

val usersCollectionRef = db.collection("users")
Java
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Python
users_ref = db.collection(u'users')
C ++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Aller
usersRef := client.Collection("users")
PHP
$collection = $db->collection('users');
Unité
CollectionReference collectionRef = db.Collection("users");
C #
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 vers 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 :

la toile
var alovelaceDocumentRef = db.doc('users/alovelace');
Rapide
let aLovelaceDocumentReference = db.document("users/alovelace")
Objectif c
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];

Java

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

Kotlin + KTX

val alovelaceDocumentRef = db.document("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')
C ++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Aller
alovelaceRef := client.Doc("users/alovelace")
PHP
$document = $db->document('users/lovelace');
Unité
DocumentReference documentRef = db.Document("users/alovelace");
C #
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, envisagez 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:

  • chambres

    • ROOMA

      name : "my chat room"

    • roomB

      ...

Maintenant que vous avez des salles 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 chat peut contenir un grand nombre de messages. Cependant, vous pouvez créer des collections supplémentaires dans le document de votre salle de conversation, 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 :

  • chambres

    • ROOMA

      name : "my chat room"

      • messages de

        • message1

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

        • message2

          ...

    • roomB

      ...

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

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

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")
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')
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
$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Unité
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
C #
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 l'accès aux données. Pour obtenir tous les messages de roomA , vous pouvez créer une référence de collection aux messages sous-collection et interagir avec elle comme vous le feriez pour toute 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.