es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualizar el campo “subcolección” en Firestore.

Tengo una colección de Firestore y quiero actualizar algunos campos en su subcolección, que está en forma de un array. No puedo lograr hacer esto. El parámetro ‘data’ me proporciona exactamente lo que quiero, y luego lo corto para obtener el último array en la subcolección. También he desglosado hasta la colección(”) .doc(”) .collection(”), pero sin suerte. ¡Gracias por cualquier ayuda!

async updateDialogueStatus({ state }, data){
    const whoDis =  this.$fire.auth.currentUser
    if (data.dialogue.length > 0) {
      const lastDialogueInArray = data.dialogue.slice(-1)[0];
      this.$fire.firestore.collection('conversations/' + data.id + 'dialogue/' + lastDialogueInArray.messageId).update({
           status: 'read',
           readBy: whoDis.email
      })
    } else {}
}

Recibo este error: “Sin capturar (en promesa) TypeError: _this2.$fire.firestore.collection(…).update no es una función”

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está con la función update(). En lugar de usar update(), debes usar doc().update() para actualizar los campos en un documento.

    Aquí tienes una versión actualizada del código:

    async updateDialogueStatus({ state }, data){
      const whoDis = this.$fire.auth.currentUser;
      if (data.dialogue.length > 0) {
        const lastDialogueInArray = data.dialogue.slice(-1)[0];
        const docRef = this.$fire.firestore.collection('conversations').doc(data.id).collection('dialogue').doc(lastDialogueInArray.messageId);
        await docRef.update({
          status: "read",
          readBy: whoDis.email
        });
      }
    }
    

    En esta versión, primero obtenemos una referencia al documento que queremos actualizar usando doc(). Luego podemos llamar a update() en esa referencia de documento para actualizar los campos especificados. Asegúrate de incluir la palabra clave await antes de la llamada a update() para asegurarte de que termine antes de continuar.

Comments are closed.