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, los datos se almacenan en documentos , que se organizan 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 liviano 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ías 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 su tamaño está 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 de documentos. Por ejemplo, podría tener una colección users
que contenga varios usuarios, cada uno representado por un documento:
usuarios
first : "Ada"
last : "Lovelace"
born : 1815
first : "Alan"
last : "Turing"
born : 1912
Cloud Firestore no tiene esquemas, por lo que tienes total libertad sobre qué campos colocas en cada documento y qué tipos de datos almacenas en esos campos. Todos 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 utilizar los mismos campos y tipos de datos en varios documentos, para poder 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. (Consulta 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" ni "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, ésta 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 modular API
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web namespaced API
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
Ir
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 simplemente apunta a una ubicación en su base de datos. Puede crear una referencia independientemente de que existan datos allí o no, y la creación de una referencia no realiza ninguna operación de red.
También puedes crear referencias a colecciones :
Web modular API
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web namespaced API
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
Ir
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 diagonal ( /
). Por ejemplo, para crear una referencia al documento alovelace
:
Web modular API
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web namespaced API
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
Ir
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.
Puedes crear una colección llamada rooms
para almacenar diferentes salas de chat:
salón
name : "my chat room"
salón
B...
Ahora que tienes salas de chat, decide cómo almacenar tus mensajes. Es posible que no desees 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, puedes crear colecciones adicionales dentro del documento de tu 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 de su colección rooms
:
salón
name : "my chat room"
mensajes
mensaje
from : "alex"
msg : "Hello World!"
mensaje
...
salón
B...
En este ejemplo, crearía una referencia a un mensaje en la subcolección con el siguiente código:
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');
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
Ir
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 siempre deben seguir este patrón. No puede hacer referencia a una colección en una colección o a un documento en un documento.
Las subcolecciones le permiten estructurar los datos jerárquicamente, lo que facilita el acceso a los datos. Para obtener todos los mensajes en roomA
, puede crear una referencia de colección para los messages
de la 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.