Así que estoy trabajando en un proyecto personal para aprender a usar react-native y Firestore.
Tengo una base de datos como esta:
Y quiero que mi código agregue una batería nueva en el conjunto de batteries . Los elementos de la matriz son solo un map{string, string}
El problema es que cuando actualizo la matriz con una nueva marca, funciona, pero si quiero actualizarla con la misma marca, tengo que tener al final
batteries[0]: {'brand': 'cestmoi'} batteries[1]: {'brand': 'cestmoi'}La base de datos no se actualiza, no tiene ningún error o algo así.
No entiendo por qué y seguí su tutorial. Aquí está mi código:
async function addData(collection, doc, value) { console.log(`Add data ${value.brand}`) try { const result = await firestore() .collection(collection) .doc(doc) .set({ batteries: firestore.FieldValue.arrayUnion(value) }) console.log(result); return result; } catch (error) { return error; } } Uso try-catch por costumbre, pero no sé si then...catch es mejor o no.
Como ya mencionó @windowsill en su respuesta, no hay forma de que pueda agregar elementos duplicados en una matriz usando el código del lado del cliente. Si su aplicación lo requiere, entonces debe leer la matriz completa, agregar los duplicados y luego escribir el documento nuevamente en Firestore.
Sin embargo, si desea actualizar un elemento existente en una matriz de objetos (mapas), debe usar arrayUnion con todo el objeto. Si desea comprender mejor el mecanismo, puede leer el siguiente artículo que se llama:
arrayUnion dice que "agrega elementos a una matriz, pero solo elementos que aún no están presentes". Tal vez hace una cadena o algo para verificar la igualdad y, por lo tanto, no agrega el nuevo elemento. Creo que tendrá que 1. obtener la lista actual, 2. agregar su elemento, 3. configurar el campo de baterías en la lista actualizada.