Para el contexto, estoy usando firebase/nodeJS en mi aplicación.
Estoy eliminando un usuario de una colección llamada trabajadores. Para hacerlo, actualizo el campo eliminado: verdadero en el documento del trabajador. No voy a eliminar el documento, porque quiero conservar su información si es necesario. Pero cuando elimino un trabajador, debo eliminarlo de todas las propiedades en las que está trabajando (tienen un campo llamado trabajadores, que es una matriz de todos los trabajadores asociados).
Por lo tanto, debo navegar por todas las propiedades de la colección asociada, verificar si el trabajador está en ella y eliminarlo.
Hay una manera de hacerlo ? Vi esta página: https://firebase.google.com/docs/firestore/manage-data/add-data#node.js_11 Pero no sé cómo usar estos recursos para hacerlo.
Así que finalmente lo hice solo. Primero, tuve que buscar todas las propiedades en las que se está trabajando, para hacer esto usé array-contains.
let docsProperties = await db.collection('user').doc(id).collection("properties") .where("workers", "array-contains", workerId).get();Luego quise navegar por todas estas propiedades y eliminar al trabajador. Pensé en hacer un ForEach primero. Pero el problema es que quería usar un await .update() con arrayRemove y los métodos asíncronos no se pueden usar dentro de ForEach. Así que usé promesas.
let promises = []; docsProperties.forEach(doc => { promises.push(doc.ref.update({ workers: admin.firestore.FieldValue.arrayRemove(workerId) })); }); return Promise.all(promises);arrayRemove es un método de la documentación de firebase para eliminar todas las ocurrencias de un elemento en un campo de matriz siguiente. ¡Así que busqué todas las propiedades, agregué todas las promesas y las ejecuté!
funcionó perfectamente, si alguien tiene preguntas no lo dude.