Estaba practicando firebase firestore y estoy tratando de actualizar los datos que recuperé en función de una condición y recibo este error
FirebaseError: se esperaba el tipo 'rc', pero era: un objeto oc personalizado
if (updateMerge === "update") { const q = query( collection(db, "contacts"), where("fname", "==", firstName, "lname", "==", lastName) ); const querySnapshot = await getDocs(q); querySnapshot.forEach((doc) => { console.log(doc.id, " => ", doc.data()); const payload = { phone: phone }; setDoc(q, payload); }); }
Estoy haciendo una aplicación de contacto. Puedo ver los datos recuperados en la consola y quiero cambiar el número de teléfono si un usuario ya tiene una cuenta, por lo que la carga útil cambia el teléfono (desde el campo del documento de Firestore): teléfono (estado del teléfono). así que practiqué un poco con setDoc pero generalmente uso "colecciónRef" pero no con una consulta, si puedo ver la consola, lo más probable es que el error esté aquí
setDoc(q, payload);
Gracias de antemano
setDoc()
toma una DocumentReference como primer parámetro. Si está intentando actualizar los documentos en QuerySnapshot , intente refactorizar el código como se muestra a continuación:
querySnapshot.forEach((doc) => { console.log(doc.id, " => ", doc.data()); const payload = { phone: phone }; // doc.ref is DocumentReference setDoc(doc.ref, payload); });
Si está actualizando 500 documentos o menos, puede usar Escrituras por lotes para asegurarse de que todos los documentos se actualicen o la actualización falle:
import { writeBatch } from "firebase/firestore"; const batch = writeBatch(db); querySnapshot.forEach((doc) => { console.log(doc.id, " => ", doc.data()); const payload = { phone: phone }; // doc.ref is DocumentReference batch.update(doc.ref, payload); }); batch.commit().then(() => { console.log("Documents updated") }).catch((e) => { console.log("An error occured") })