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”
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:
Este código actualiza el documento
id
en la colecciónIMAGES
de la base de datos de Firestore con el nuevo valorfileUrl
en el array ubicado enimages.${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 }
.Este código crea un nuevo array con la clave
key
bajo la carpetafolder
en el documentoid
, si no existe. Si ya existe, se agrega el nuevo valorfileUrl
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.