Estoy tratando de eliminar un elemento de matriz de una matriz en un documento usando el método updateDoc, para eso necesito la referencia del documento, sin embargo, no sé cómo obtenerla, ya que fue generada por Firebase y la documentación o las preguntas anteriores no tienen ayudó. Este es mi código:
const subjectRef = collection(db, "users", auth.currentUser.uid, "subjects"); const querySnapshot = await getDocs(subjectRef); subjects.forEach(subject => { querySnapshot.forEach((doc) => { if(doc.data().Subject == subject) { const subject = doc.data(); const subjectName = subject.Subject; const topics = subject.Topics; //iterates through the topics of the subjects globalTopicList.forEach(obj => { topics.forEach(async topic => { if(obj[1]==topic.id) { const temp = { Topic: topic.Topic, Days: 0, Rating: topic.Rating, id: topic.id, }; await updateDoc(docRef, { Topics: arrayRemove(topic.id) }); console.log('done'); } }); }); } }); });
Cada QueryDocumentSnapshot tiene una propiedad .ref
que es la DocumentReference de ese documento:
const updates = []; querySnapshot.forEach((doc) => { const docRef = doc.ref updates.push(updateDoc(docRef, {...updatedData})) }) return Promise.all(updates).then(() => { console.log("Documents updated") }).catch((e) => console.log(e))
Si está actualizando menos de 500 documentos, puede actualizarlos a la vez mediante una escritura por lotes:
import { writeBatch, doc } from "firebase/firestore"; const batch = writeBatch(db); querySnapshot.forEach((doc) => { const docRef = doc.ref batch.update(docRef, {...updatedData})) }) // Commit the batch await batch.commit();