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.

Modificar arrays en Firebase Firestore

La base de datos Firestore tiene la siguiente estructura de campos:

images: {day: ['url1', 'url2', 'url3,] night: ['url1']}

En primer lugar, me gustaría poder adjuntar un valor a los arrays. Intenté lo siguiente:

await updateDoc(doc(firestore, FIRSTORE_COLLECTIONS.IMAGES, id), {
        [folder]: {
          [key]: arrayUnion(fileUrl)
        }

Se fue a la ruta correcta dentro de las imágenes, pero desafortunadamente esto solo creó un nuevo array con un valor y eliminó los que ya estaban allí.

En segundo lugar, si también me gustaría poder crear un nuevo array en la misma ruta con una clave que no existe, ¿se puede hacer esto y cómo se resolvería con esta configuración? ¿alguna idea?

Dependencias: “firebase”: “^9.1.1”, “react”: “^17.0.2”

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para agregar un valor a los arrays en la base de datos de Firestore, se puede utilizar la función arrayUnion(). Sin embargo, el código proporcionado en la pregunta parece estar creando un nuevo array con un valor y sobrescribiendo los valores anteriores.

    Para agregar un valor a un array existente en un documento de Firestore, se puede utilizar el siguiente código:

    await updateDoc(doc(firestore, FIRESTORE_COLLECTIONS.IMAGES, id), {
        [`${folder}.${key}`]: firestore.FieldValue.arrayUnion(fileUrl)
    });
    

    Este código actualiza el documento id en la colección IMAGES de la base de datos de Firestore con el nuevo valor fileUrl en el array ubicado en images.${folder}.${key}.

    Para crear un nuevo array con una clave que no existe, se puede utilizar la función set() con la opción { merge: true }.

    await setDoc(doc(firestore, FIRESTORE_COLLECTIONS.IMAGES, id), {
        [folder]: {
            [key]: firestore.FieldValue.arrayUnion(fileUrl)
        }
    }, { merge: true });
    

    Este código crea un nuevo array con la clave key bajo la carpeta folder en el documento id, si no existe. Si ya existe, se agrega el nuevo valor fileUrl al array existente.

    Nota: La opción merge se establece en true para que el documento existente no se sobrescriba, sino que se fusiona con los nuevos datos.

Comments are closed.