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

437
Views
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 answers
Answer question

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 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!