Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

147
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda