Saltar al contenido

Cómo actualizar un “array de objetos” con Firestore?

Tenemos la mejor respuesta que encontramos en todo internet. Esperamos que te sirva de ayuda y si quieres compartir cualquier detalle que nos pueda ayudar a perfeccionar nuestra información hazlo con total libertad.

Solución:

Firestore ahora tiene dos funciones que le permiten actualizar un array sin volver a escribir todo.

Enlace: https://firebase.google.com/docs/firestore/manage-data/add-data, específicamente https://firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array

Actualizar elementos en un array

Si su documento contiene un array campo, puede usar arrayUnion() y arrayRemove() para agregar y eliminar elementos. arrayUnion() agrega elementos a un array pero sólo elementos que aún no están presentes. arrayRemove() elimina todas las instancias de cada elemento dado.

Editar 13/08/2018: Ahora hay soporte para nativo array operaciones en Cloud Firestore. Vea la respuesta de Doug a continuación.


Actualmente no hay manera de actualizar un solo array elemento (o agregar/eliminar un solo elemento) en Cloud Firestore.

Este código aquí:

firebase.firestore()
.collection('proprietary')
.doc(docID)
.set(
   sharedWith: [ who: "[email protected]", when: new Date() ] ,
   merge: true 
)

Esto dice que establezca el documento en proprietary/docID tal que sharedWith = [ who: "[email protected]", when: new Date() pero para no afectar ninguna propiedad existente del documento. Es muy parecido al update() llamarle proporcionado sin embargo el set() llamar con crear el documento si no existe mientras el update() la llamada fallará.

Así que tienes dos opciones para lograr lo que quieres.

Opción 1 – Establecer el conjunto array

Llamar set() con todo el contenido del array, lo que requerirá leer primero los datos actuales de la base de datos. Si le preocupan las actualizaciones simultáneas, puede hacer todo esto en una transacción.

Opción 2 – Usar una subcolección

podrías hacer sharedWith una subcolección del documento principal. Luego, agregar un solo elemento se vería así:

firebase.firestore()
  .collection('proprietary')
  .doc(docID)
  .collection('sharedWith')
  .add( who: "[email protected]", when: new Date() )

Por supuesto, esto viene con nuevas limitaciones. No podrá consultar documentos en función de con quién se comparten, ni podrá obtener el documento y todos los sharedWith datos en una sola operación.

Aquí está el último ejemplo de la documentación de Firestore:

firebase.firestore.FieldValue.ArrayUnion

var washingtonRef = db.collection("cities").doc("DC");

// Atomically add a new region to the "regions" array field.
washingtonRef.update(
    regions: firebase.firestore.FieldValue.arrayUnion("greater_virginia")
);

// Atomically remove a region from the "regions" array field.
washingtonRef.update(
    regions: firebase.firestore.FieldValue.arrayRemove("east_coast")
);

Comentarios y calificaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *