Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

439
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda