Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

149
Views
¿Cómo enviar datos al documento de Firestore?

Básicamente, lo que quiero es que si un documento no existe, cree uno nuevo (ahora funciona bien), pero si existe un documento, inserte un nuevo objeto en la matriz existente.

Pude obtener datos de documentos y consola. Regístrelos, pero no sé cómo insertar nuevos en el documento existente.

Mi estructura de FB se ve así:

 favorites someUserID Videos [ 0: { name: SomeName url: SomeUrl }, /* I would like to push new objects like this: */ 1: { name: data.name url: data.url }, ]

Este es mi código actual:

 const { user } = UserAuth(); const UserID = user.uid; const favoritesRef = doc(db, "favorites", UserID); const test = async (data) => { try { await runTransaction(db, async (transaction) => { const sfDoc = await transaction.get(favoritesRef); if (!sfDoc.exists()) { setDoc(favoritesRef, { Videos: [{name: data.name}] }); } /* I got my document content here */ const newFavorites = await getDoc(favoritesRef); console.log("Document data:", newFavorites.data()); /* And would like to push new Data here */ transaction.update(favoritesRef, { name: data.name}); }); console.log("Transaction successfully committed!"); } catch (e) { console.log("Transaction failed: ", e); } }
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Para actualizar el arreglo, Firestore ahora tiene una función que le permite actualizar un arreglo sin volver a escribir su código:

Actualizar elementos en una matriz

Si su documento contiene un campo de matriz, puede usar arrayUnion() y arrayRemove() para agregar y eliminar elementos. arrayUnion() agrega elementos a una matriz, pero solo los elementos que aún no están presentes. arrayRemove() elimina todas las instancias de cada elemento dado.

 import { doc, updateDoc, arrayUnion, arrayRemove } from "firebase/firestore"; const washingtonRef = doc(db, "cities", "DC"); // Atomically add a new region to the "regions" array field. await updateDoc(washingtonRef, { regions: arrayUnion("greater_virginia") }); // Atomically remove a region from the "regions" array field. await updateDoc(washingtonRef, { regions: arrayRemove("east_coast") });
about 4 years ago · Juan Pablo Isaza Report

0

No estoy seguro si esto ayuda, pero lo que suelo hacer es:

Estoy agregando a cada usuario que inicia sesión en una matriz.

 const snapshot = await getDoc(doc(db, "allUsers", "list")); const currentUsers = snapshot.data().users; await setDoc(doc(db, "allUsers", "list"), { users: [...currentUsers, { name, uid: userId, avatar: photo }], });

Primero obtengo los elementos que existen en la lista, y luego creo uno nuevo que tiene todos los elementos anteriores y los que estoy agregando. currentUsers es la lista actual en ese caso. Tal vez deberías probar esto en lugar de Videos: [{name: data.name}]

 setDoc(favoritesRef, { Videos: [...currentVideos, {name: data.name}] })
about 4 years ago · Juan Pablo Isaza Report

0

Lo acabo de resolver así:

 const { user } = UserAuth(); const UserID = user.uid const favoritesRef = doc(db, "favorites", UserID) const test = async (data) => { try { await runTransaction(db, async (transaction) => { const sfDoc = await transaction.get(favoritesRef); if (!sfDoc.exists()) { await setDoc(favoritesRef, { favs: [ { name: data.name, ytb: data.ytb, url: data.url }]}) } const doesExists = sfDoc.data().favs.some((fav) => fav.name === data.name) console.log(doesExists) if (doesExists === true) { console.log("AlreadyExist") } else { const currentData = sfDoc.data().favs transaction.update(favoritesRef, { favs: [...currentData, { name: data.name, ytb: data.ytb, url: data.url }]} )} }); console.log("Transaction successfully committed!"); } catch (e) { console.log("Transaction failed: ", e); } }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!