Estoy tratando de escribir una función en la nube que me permita crear una colección con un documento y luego agregar un campo a ese documento. Actualmente, mi función crea la colección y el comentario, pero reemplaza cada campo cada vez y sobrescribe el existente, por lo que después de enviar todos los datos, solo termino con un campo. ¿Cómo hago para agregar un campo cada vez? mi código
if (data && typeof data === "object") { Object.keys(data).forEach((docKey) => { firestore .collection(collectionKey) .doc("quotes") .set(data[docKey]) .then((res) => { console.log("Document successfully written!"); }) .catch((error) => { console.error("Error writing document: ", error); }); //}); }datos
"2": { "Quote": "Lorem Ipsum" }, "3": { "Quote": "123" }, "4": { "Quote": "456" }después de ejecutar la función, lo único que estará en las comillas del documento es la última entrada "456". ¿Cómo hago para que todos los campos permanezcan?
Parece que está intentando actualizar el documento, pero está utilizando la función .set() que actualiza su documento con los datos proporcionados recientemente. Necesitará .update() en su lugar para conservar sus datos anteriores.
if (data && typeof data === "object") { Object.keys(data).forEach((docKey) => { firestore .collection(collectionKey) .doc("quotes") .update(data[docKey]) .then((res) => { console.log("Document successfully written!"); }) .catch((error) => { console.error("Error writing document: ", error); }); //}); }Para agregar campos a un documento existente, use la update como muestra la respuesta de Anuj.
Si desea crear el documento inicial y actualizarlo con una sola instrucción, puede pasar la opción merge: true a set() :
firestore .collection(collectionKey) .doc("quotes") .set({ [docKey]: data[docKey] }, { merge: true }) Notará que también agregué [docKey]: a los datos, ya que espero que desee que el valor de docKey se convierta en el nombre del campo.