Obtener la Referencia de Firestore
Para comenzar, necesitas importar los módulos necesarios y tener acceso a tu base de datos Firestore:
import { getFirestore, collection, getDocs, writeBatch, doc, deleteField } from "firebase/firestore";
const firestore = getFirestore();
Crear un Batch
Un batch permite agrupar múltiples operaciones de escritura, como actualizaciones o eliminaciones, en una sola solicitud.
Esto asegura que todas las operaciones se realicen de forma atómica, lo que significa que todas las modificaciones dentro del batch se aplican de manera simultánea y completa.
Si alguna de las operaciones falla, todas las operaciones en el batch se revierten, garantizando que la base de datos no quede en un estado inconsistente.
const batch = writeBatch(firestore);
Recuperar Todos los Documentos de la Colección
Para modificar todos los documentos dentro de una colección, primero debes obtenerlos:
const postsSnapshot = await getDocs(collection(firestore, "posts"));
Iterar Sobre los Documentos para Actualizar y/o Eliminar Campos
Con los documentos en mano, puedes iterar sobre cada uno de ellos para actualizar o eliminar los campos necesarios.
Aquí se muestra cómo agregar un campo llamado nuevoCampo
y cómo eliminar un campo llamado antiguoCampo
:
postsSnapshot.forEach((docSnapshot) => {
const docRef = docSnapshot.ref;
batch.update(docRef, {
nuevoCampo: [], // Agregar un nuevo campo
antiguoCampo: deleteField(), // Eliminar un campo existente
});
});
Aplicar las Actualizaciones y Eliminaciones
Finalmente, después de preparar todas las modificaciones, es momento de aplicarlas usando batch.commit()
:
await batch.commit();
Este método asegura que todas las actualizaciones y eliminaciones se ejecuten de manera eficiente y sin errores.