"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo eliminar eficazmente colecciones y subcolecciones en Firestore?

¿Cómo eliminar eficazmente colecciones y subcolecciones en Firestore?

Publicado el 2024-11-03
Navegar:100

 How to Effectively Delete Collections and Subcollections in Firestore?

Eliminar colecciones y subcolecciones en Firestore

Al trabajar con Firestore, pueden surgir escenarios en los que necesite eliminar colecciones o subcolecciones. Sin embargo, eliminar el documento principal que alberga las subcolecciones presenta desafíos. Este artículo aborda cómo gestionar este tipo de situaciones de forma eficaz.

Estructura de la base de datos y problema de eliminación

Considere un escenario con una colección llamada "listas", donde cada documento representa una lista con su identificación única. Cada documento de lista tiene subcolecciones denominadas "empleados" y "ubicaciones". La estructura es la siguiente:

(lists)
    -listId
       (employees)
       (locations)

Si un usuario desea eliminar una lista específica, eliminar el documento "listId" conservará sus subcolecciones, desafiando la documentación de Firestore.

Solución: eliminación secuencial

Para solucionar este problema, proponemos un enfoque de eliminación secuencial:

  1. Recupere todos los documentos dentro de la subcolección "empleados" y elimínelos.
  2. Repita el proceso para el subcolección "ubicaciones".
  3. Finalmente, elimine el documento "listId".

Este método garantiza la eliminación completa de la lista específica y sus subcolecciones asociadas.

Consideraciones

Si bien la eliminación es una herramienta eficaz, Firebase recomienda usarla con precaución, especialmente para colecciones grandes. Sin embargo, para colecciones más pequeñas, la eliminación es una opción viable. Si es inevitable utilizar la eliminación para colecciones grandes, ejecútela en un entorno de servidor confiable.

Implementación de código para Android

Para aplicaciones de Android, puede usar el siguiente código para implementar el proceso de eliminación:

private void deleteCollection(final CollectionReference collection, Executor executor) {
    Tasks.call(executor, () -> {
        int batchSize = 10;
        Query query = collection.orderBy(FieldPath.documentId()).limit(batchSize);
        List deleted = deleteQueryBatch(query);

        while (deleted.size() >= batchSize) {
            DocumentSnapshot last = deleted.get(deleted.size() - 1);
            query = collection.orderBy(FieldPath.documentId()).startAfter(last.getId()).limit(batchSize);

            deleted = deleteQueryBatch(query);
        }

        return null;
    });
}

@WorkerThread
private List deleteQueryBatch(final Query query) throws Exception {
    QuerySnapshot querySnapshot = Tasks.await(query.get());

    WriteBatch batch = query.getFirestore().batch();
    for (DocumentSnapshot snapshot : querySnapshot) {
        batch.delete(snapshot.getReference());
    }
    Tasks.await(batch.commit());

    return querySnapshot.getDocuments();
}

Este código recupera y elimina documentos en lotes, asegurando la eliminación tanto de la colección como de sus subcolecciones.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3