Firestore es la base de datos No SQL que nos proporciona Firebase. Tiene muchos puntos buenos, pero para alguien como yo que está acostumbrado a trabajar con una base de datos relacional de toda la vida, puede ser complicado realizar tareas tan frecuentes como decidir la estructura para almacenar los datos o saber la mejor forma de consultar y filtrar los datos.
Por ejemplo, en un momento dado necesitaba hacer una consulta en una colección de elementos y recuperar solo aquellos cuyo document id coincidiera con los que yo tenía en una lista. Para daros un poco de contexto, tenía en un List de string los id de los elementos de la colección que un usuario había marcados como favoritos, y quería recuperar solo esos elementos. Pues bien, sabía que se podía usar el «where» para poner condiciones a la query y filtrar por los campos de los elementos, pero no tenía ni idea de cómo utilizar su propio identificador como condición.
Para poder usar el document id como campo para la condición tenemos que poner el «path» del campo, y esto se hace con «FieldPath.documentId».
1
2
3
4 var storiesQuerySnapshot = await FirebaseFirestore.instance
.collection("miColeccion")
.where(FieldPath.documentId,whereIn: miListasDeStringConIds)
.get();
Así de simple. Espero haberle ahorrado a alguien las horas de búsquedas por internet que me he tirado yo para resolverlo. ¡Por cierto! lo he averiguado buscando en la documentación. A veces es mejor dedicar tiempo a investigar en la propia documentación que en stackoverflow. Viviendo y aprendiendo.