Estaba creando una función para borrar todos los documentos dentro de una colección anidada. He accedido de la siguiente manera.
const deleteChat = async () => { const chatSnapShot = await db .collection("chats") .doc(router.query.id) .collection("messages") .get(); chatSnapShot.forEach((doc) => { console.log(doc.data()); }); }; ¿Cómo puedo hacer eso? Este doc.data() devuelve los datos dentro de la colección de messages . He intentado usar otras soluciones pero las cosas no funcionan. La ayuda sería apreciada :)
get() lee todos los documentos de esa colección. Debe usar delete() para eliminar un documento. Intente refactorizar el código como se muestra a continuación:
const deleteChat = async () => { const chatSnapShot = await db .collection("chats") .doc(router.query.id) .collection("messages") .get(); const deletePromises = chatSnapshot.docs.map(d => d.ref.delete()); await Promise.all(deletePromises) console.log("Documents deleted") }; Aquí chatSnapShot.docs es una matriz de QueryDocumentSnapshot y puede obtener DocumentReference para cada documento usando la propiedad .ref . Luego, la referencia del documento tiene el método .delete() para eliminar el documento. Este método devuelve una promesa para que pueda asignar una serie de promesas y ejecutarlas a la vez usando Promise.all()
También puede eliminar documentos en lotes de hasta 500 documentos mediante escrituras por lotes.