¿Qué se considera más eficiente al eliminar una colección de Firestore?
Realizar eliminaciones mediante lotes:
async function deleteCollection(db, collectionPath, batchSize) { const collectionRef = db.collection(collectionPath); const query = collectionRef.orderBy('__name__').limit(batchSize); return new Promise((resolve, reject) => { deleteQueryBatch(db, query, resolve).catch(reject); }); } async function deleteQueryBatch(db, query, resolve) { const snapshot = await query.get(); const batchSize = snapshot.size; if (batchSize === 0) { // When there are no documents left, we are done resolve(); return; } // Delete documents in a batch const batch = db.batch(); snapshot.docs.forEach((doc) => { batch.delete(doc.ref); }); await batch.commit(); // Recurse on the next process tick, to avoid // exploding the stack. process.nextTick(() => { deleteQueryBatch(db, query, resolve); }); } O usando el método recursiveDelete() predeterminado de firestore:
await firestore.recursiveDelete(collectionRef);Nota: La colección que intento eliminar no tiene subcolecciones anidadas. Además, estoy ejecutando este código en una función de nube.
/messages (C) -message_id_1 (D) -message_id_2 (D) -message_id_3 (D) ... -message_id_10000 (D)La función recursiveDelete utiliza el mismo mecanismo que las escrituras por lotes bajo el capó, por lo que cualquier diferencia de rendimiento debería ser insignificante.