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

438
Vistas
Cómo consultar un solo documento por parámetro personalizado y actualizarlo en Firebase 9

Tengo una identificación personalizada en mis documentos de Firebase. Quiero obtener un solo documento consultando por esa ID personalizada y modificarlo. Estoy usando firebase v9.

Aquí está mi código hasta ahora:

 const toggleLike = async () => { const q = query(collection(db, 'mixrCocktails'), where('id', '==', cocktailId)) const querySnapshot = await getDocs(q) const result: any[] = [] querySnapshot.forEach(doc => result.push(doc.data()) ) if (!isLiked) { await updateDoc(result[0], { userLikes: arrayUnion(publisherId) }) setIsLiked(true) } else { await updateDoc(result[0], { userLikes: arrayRemove(publisherId) }) setIsLiked(false) } }

La consulta funciona bien, pero el problema es cuando ejecuto updateDoc . Obtuve el siguiente error:

 Uncaught (in promise) FirebaseError: Expected type 'Zu', but it was: a custom Object object

Intenté ejecutar result[0].update({ userLikes: arrayUnion(publisherId) }) y obtengo Uncaught (in promise) TypeError: result[0].update is not a function .

yo también he intentado

 const docRef = doc(db, "mixrCocktails", cocktail.id) await updateDoc(docRef, { userLikes: arrayUnion(publisherId) })

y obtengo

 Uncaught (in promise) TypeError: n.indexOf is not a function

En los documentos (https://firebase.google.com/docs/firestore/manage-data/add-data ) veo que usan una referencia de documento de la siguiente manera:

 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") });

En el ejemplo, entiendo que "DC" es el ID que establece Firebase para el documento. Pero, ¿cómo puedo crear una referencia consultando otro campo diferente a ese?

El código completo se puede encontrar aquí: https://github.com/coccagerman/mixr

¡Gracias por adelantado!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Basado en tu pregunta, si entiendo bien. Desea consultar un documento usando where antes de actualizar el resultado del documento.

No está haciendo referencia a updateDoc() correctamente. Verifique el fragmento que escribí basado en su fragmento anterior. Aquí hay algunas opciones:

Usando .map :

 const q = query(collection(db, 'mixrCocktails'), where('id', '==', cocktailId)); const querySnapshot = await getDocs(q); const documents = querySnapshot.docs.map((doc) => ({ id: doc.id, ...doc.data() })); for (const document of documents) { // console.log(document.id); const documentRef = doc(db, 'mixCocktails', document.id); if (!isLiked) { await updateDoc(documentRef, { userLikes: arrayUnion(publisherId) }) setIsLiked(true) } else { await updateDoc(documentRef, { userLikes: arrayRemove(publisherId) }) setIsLiked(false) } }

Usando el método async :

 async function updateDocuments (document) { // console.log(document.id); const documentRef = doc(db, 'mixrCocktails', document.id); if (!isLiked) { await updateDoc(documentRef, { userLikes: arrayUnion(publisherId) }) setIsLiked(true) } else { await updateDoc(documentRef, { userLikes: arrayRemove(publisherId) }) setIsLiked(false) } } const q = query(collection(db, 'mixrCocktails'), where('id', '==', cocktailId)); const querySnapshot = await getDocs(q); querySnapshot.forEach((document) => { updateDocuments(document); });

Todavía puede mejorar el código escrito anterior para su caso de uso.

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