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í:
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:
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 ligeros.
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:
first : "Ada"
last : "Lovelace"
born : 1815
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
let alovelaceDocumentRef = db.collection("users").document("alovelace")
C objetivo
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
Pitón
Python
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Nodo.js
Vamos
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 .
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 .
Rubí
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
let usersCollectionRef = db.collection("users")
C objetivo
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
Pitón
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Nodo.js
Vamos
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 .
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 .
Rubí
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
let aLovelaceDocumentReference = db.document("users/alovelace")
C objetivo
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
Pitón
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Nodo.js
Vamos
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 .
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 .
Rubí
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:
sala
Aname : "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
:
sala
Aname : "my chat room"
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
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
C objetivo
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
Pitón
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Nodo.js
Vamos
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 .
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 .
Rubí
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.