// Get a new write batch const batch = writeBatch(db); var TransactionRecordRef = doc(collection(db, "TopUpRecord")); batch.set(TransactionRecordRef, { Amount: FinalTopUpAmount, DateTime: serverTimestamp(), StudentID: StudentID, }); //var TopUptoUserRef = doc(collection(db, "user")); const UQuery = query(collection(db, "user"), where("studentID", "==", StudentID)); batch.update(UQuery, { "studentAmount": increment(FinalTopUpAmount) }); batch.commit();@firebase/firestore: Firestore (9.8.1): AsyncQueue no pudo persistir escribir: TypeError: no se pueden leer las propiedades de undefined (leyendo 'ruta')
Me gustaría usar writebatch para actualizar el campo studentAmount que busca según el ID del estudiante, pero sigue apareciendo un mensaje de error @firebase/firestore: Firestore (9.8.1): AsyncQueue no pudo persistir escribir: TypeError: no se pueden leer las propiedades de indefinido (leyendo 'ruta'). ¿Alguien sabe por qué este tipo de problema y hay alguna solución?
Al revisar su código anterior, solo consultó los documentos que carecen de ejecución de la consulta. Debe llamar al método getDocs para recuperar los documentos. Vea el código de muestra a continuación:
import { getDocs } from "firebase/firestore"; // Get a new write batch const batch = writeBatch(db); var TransactionRecordRef = doc(collection(db, "TopUpRecord")); batch.set(TransactionRecordRef, { Amount: FinalTopUpAmount, DateTime: serverTimestamp(), StudentID: StudentID, }); //var TopUptoUserRef = doc(collection(db, "user")); const UQuery = query(collection(db, "user"), where("studentID", "==", StudentID)); // Get the documents from `Uquery` const querySnapshot = await getDocs(UQuery); // Loop all the retrieved documents querySnapshot.forEach((doc) => { // Get the document reference by using `doc.ref` batch.update(doc.ref, { "studentAmount": increment(FinalTopUpAmount) }); }); batch.commit();Se agregaron algunos comentarios sobre el código anterior. Para más información, puede consultar esta documentación .