¿Existe una manera de vincular subcolecciones en Firestore a la colección raíz?
Tengo 2 colecciones principales que son drivers y cars. En la colección drivers, tengo documentos que representan a cada uno de los conductores. Sin embargo, cada conductor tiene una subcolección que se llama driverCars para representar cuántos coches ha registrado el conductor y todos los datos del coche que el conductor específico tiene.
Lo hice de esta manera porque es fácil consultar cuántos coches están registrados en firebase y cuántos coches ha registrado un conductor en particular. Hay más consultas que puedo utilizar para obtener datos de todos los coches y de los coches que sólo un usuario específico tiene. Actualizo ambas colecciones para cars y driverCars cuando un conductor acaba de registrar un coche usando lenguaje dart en flutter para el backend. Y si el coche ya existe en la colección cars, entonces sólo se actualiza en driverCars. Sin embargo, tengo un problema cuando quiero borrar el coche manualmente en firebase. Ya que las 2 colecciones no están vinculadas, tengo que borrar ambos documentos manualmente y creo que no es una buena aproximación.
Así que mi pregunta es, ¿existe alguna forma de evitar esto? ¿Hay alguna forma de decirle a firebase que los datos de los coches en la subcolección driverCars están vinculados a los coches y que si se elimina uno de ellos, ambos se eliminarán automáticamente… o es mi error modelar la colección de firestore de esta manera??
davy.ai
Sí, hay una manera de prevenir esto. Puedes utilizar las referencias de Cloud Firestore de Firebase para vincular las dos colecciones. Esto permitirá crear una referencia entre las dos colecciones, de modo que cuando se elimine un documento, el otro también se eliminará.
Para crear una referencia, puedes utilizar el método
.add()
en el objetoDocumentReference
. Por ejemplo, si quisieras crear una referencia entre la coleccióndrivers
y la coleccióncars
, podrías hacer algo así:Una vez creada la referencia, puedes usar el método
.delete()
en el objetoDocumentReference
para eliminar ambos documentos al mismo tiempo.