Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Modelo de datos de Cloud Firestore

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Cloud Firestore es una base de datos NoSQL orientada a documentos. A diferencia de una base de datos SQL, no hay tablas ni filas. En su lugar, almacena datos en documentos , que están organizados en colecciones .

Cada documento contiene un conjunto de pares clave-valor. Cloud Firestore está optimizado para almacenar grandes colecciones de documentos pequeños.

Todos los documentos deben almacenarse en colecciones. Los documentos pueden contener subcolecciones y objetos anidados, los cuales pueden incluir campos primitivos como cadenas u objetos complejos como listas.

Las colecciones y los documentos se crean implícitamente en Cloud Firestore. Simplemente asigne datos a un documento dentro de una colección. Si la colección o el documento no existe, Cloud Firestore lo crea.

Documentos

En Cloud Firestore, la unidad de almacenamiento es el documento. Un documento es un registro ligero que contiene campos, que se asignan a valores. Cada documento se identifica con un nombre.

Un documento que represente a un usuario alovelace podría verse así:

  • alovelace

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

Los objetos complejos y anidados en un documento se denominan mapas. Por ejemplo, podría estructurar el nombre del usuario del ejemplo anterior con un mapa, como este:

  • alovelace

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

Puede notar que los documentos se parecen mucho a JSON. De hecho, básicamente lo son. Existen algunas diferencias (por ejemplo, los documentos admiten tipos de datos adicionales y tienen un tamaño limitado a 1 MB), pero, en general, puede tratar los documentos como registros JSON livianos.

Colecciones

Los documentos viven en colecciones, que son simplemente contenedores para documentos. Por ejemplo, podría tener una colección de users para contener varios usuarios, cada uno representado por un documento:

  • usuarios

    • alovelace

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

    • aturdimiento

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

Cloud Firestore no tiene esquemas, por lo que tiene total libertad sobre qué campos coloca en cada documento y qué tipos de datos almacena en esos campos. Los documentos dentro de la misma colección pueden contener diferentes campos o almacenar diferentes tipos de datos en esos campos. Sin embargo, es una buena idea usar los mismos campos y tipos de datos en varios documentos, para que pueda consultar los documentos más fácilmente.

Una colección contiene documentos y nada más. No puede contener directamente campos sin formato con valores, y no puede contener otras colecciones. (Consulte Datos jerárquicos para obtener una explicación sobre cómo estructurar datos más complejos en Cloud Firestore).

Los nombres de los documentos dentro de una colección son únicos. Puede proporcionar sus propias claves, como ID de usuario, o puede dejar que Cloud Firestore cree ID aleatorias automáticamente.

No es necesario "crear" o "eliminar" colecciones. Después de crear el primer documento de una colección, la colección existe. Si elimina todos los documentos de una colección, ya no existe.

Referencias

Cada documento en Cloud Firestore se identifica de forma única por su ubicación dentro de la base de datos. El ejemplo anterior mostraba un documento alovelace dentro de la colección users . Para hacer referencia a esta ubicación en su código, puede crear una referencia a ella.

Web version 9

import { doc } from "firebase/firestore";

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

Web version 8

var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Rápido
Nota: este producto no está disponible en los objetivos watchOS y App Clip.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
C objetivo
Nota: este producto no está disponible en los objetivos watchOS y 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");
Pitón
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");
Nodo.js
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
Vamos
alovelaceRef := client.Collection("users").Doc("alovelace")
PHP

PHP

Para obtener más información sobre cómo instalar y crear un cliente de Cloud Firestore, consulte Bibliotecas de clientes de Cloud Firestore .

$document = $db->collection('samples/php/users')->document('alovelace');
Unidad
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#

C#

Para obtener más información sobre cómo instalar y crear un cliente de Cloud Firestore, consulte Bibliotecas de clientes de Cloud Firestore .

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

Una referencia es un objeto liviano que solo apunta a una ubicación en su base de datos. Puede crear una referencia ya sea que existan datos allí o no, y la creación de una referencia no realiza ninguna operación de red.

También puede crear referencias a colecciones :

Web version 9

import { collection } from "firebase/firestore";

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

Web version 8

var usersCollectionRef = db.collection('users');
Rápido
Nota: este producto no está disponible en los objetivos watchOS y App Clip.
let usersCollectionRef = db.collection("users")
C objetivo
Nota: este producto no está disponible en los objetivos watchOS y 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");
Pitón
users_ref = db.collection(u'users')

Python

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Nodo.js
const usersCollectionRef = db.collection('users');
Vamos
usersRef := client.Collection("users")
PHP

PHP

Para obtener más información sobre cómo instalar y crear un cliente de Cloud Firestore, consulte Bibliotecas de clientes de Cloud Firestore .

$collection = $db->collection('samples/php/users');
Unidad
CollectionReference collectionRef = db.Collection("users");
C#

C#

Para obtener más información sobre cómo instalar y crear un cliente de Cloud Firestore, consulte Bibliotecas de clientes de Cloud Firestore .

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

Para mayor comodidad, también puede crear referencias especificando la ruta a un documento o colección como una cadena, con los componentes de la ruta separados por una barra inclinada ( / ). Por ejemplo, para crear una referencia al documento alovelace :

Web version 9

import { doc } from "firebase/firestore"; 

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

Web version 8

var alovelaceDocumentRef = db.doc('users/alovelace');
Rápido
Nota: este producto no está disponible en los objetivos watchOS y App Clip.
let aLovelaceDocumentReference = db.document("users/alovelace")
C objetivo
Nota: este producto no está disponible en los objetivos watchOS y 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");
Pitón
a_lovelace_ref = db.document(u'users/alovelace')

Python

a_lovelace_ref = db.document("users/alovelace")
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Nodo.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Vamos
alovelaceRef := client.Doc("users/alovelace")
PHP

PHP

Para obtener más información sobre cómo instalar y crear un cliente de Cloud Firestore, consulte Bibliotecas de clientes de Cloud Firestore .

$document = $db->document('users/alovelace');
Unidad
DocumentReference documentRef = db.Document("users/alovelace");
C#

C#

Para obtener más información sobre cómo instalar y crear un cliente de Cloud Firestore, consulte Bibliotecas de clientes de Cloud Firestore .

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

Datos jerárquicos

Para comprender cómo funcionan las estructuras de datos jerárquicas en Cloud Firestore, considere una aplicación de chat de ejemplo con mensajes y salas de chat.

Puede crear una colección llamada rooms para almacenar diferentes salas de chat:

  • habitaciones

    • sala A

      name : "my chat room"

    • sala B

      ...

Ahora que tiene salas de chat, decida cómo almacenar sus mensajes. Es posible que no desee almacenarlos en el documento de la sala de chat. Los documentos en Cloud Firestore deben ser livianos y una sala de chat puede contener una gran cantidad de mensajes. Sin embargo, puede crear colecciones adicionales dentro del documento de su sala de chat, como subcolecciones.

Subcolecciones

La mejor manera de almacenar mensajes en este escenario es mediante subcolecciones. Una subcolección es una colección asociada a un documento específico.

Puede crear una subcolección llamada messages para cada documento de sala en su colección de rooms :

  • habitaciones

    • sala A

      name : "my chat room"

      • mensajes

        • mensaje

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

        • mensaje

          ...

    • sala B

      ...

En este ejemplo, crearía una referencia a un mensaje en la subcolección con el siguiente código:

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');
Rápido
Nota: este producto no está disponible en los objetivos watchOS y App Clip.
let messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")
C objetivo
Nota: este producto no está disponible en los objetivos watchOS y 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");
Pitón
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");
Nodo.js
const messageRef = db.collection('rooms').doc('roomA')
  .collection('messages').doc('message1');
Vamos
messageRef := client.Collection("rooms").Doc("roomA").
	Collection("messages").Doc("message1")
PHP

PHP

Para obtener más información sobre cómo instalar y crear un cliente de Cloud Firestore, consulte Bibliotecas de clientes de Cloud Firestore .

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Unidad
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
C#

C#

Para obtener más información sobre cómo instalar y crear un cliente de Cloud Firestore, consulte Bibliotecas de clientes de Cloud Firestore .

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

Observe el patrón alterno de colecciones y documentos. Tus colecciones y documentos deben seguir siempre este patrón. No puede hacer referencia a una colección en una colección o un documento en un documento.

Las subcolecciones le permiten estructurar los datos jerárquicamente, facilitando el acceso a los datos. Para obtener todos los mensajes en roomA , puede crear una referencia de colección a los messages de subcolección e interactuar con ella como lo haría con cualquier otra referencia de colección.

Los documentos en subcolecciones también pueden contener subcolecciones, lo que le permite anidar más datos. Puede anidar datos hasta 100 niveles de profundidad.