Flutter & Firestore: ¿Cómo obtengo primero el más reciente?
¿Cómo obtengo el primero más reciente de Firestore?
FirebaseFirestore.instance.collection(Strings.factsText)
.where(
Strings.category,
whereIn: [Strings.climateChange])
.orderBy('timestamp', descending: true)
.snapshots(),
...
final factsDocs = snapshot.data.documents;
return FactsListContainer(factsDocs: factsDocs);
});
¡El problema parece ser .wherecuando se usa con .orderBy!
Respuestas
Si tiene un createdAtcampo con una marca de tiempo o un valor siempre creciente, puede obtener las instantáneas en orden descendente de ese campo con:
stream: FirebaseFirestore.instance
.collection(Strings.factsText)
.orderBy('timestamp', descending: true)
.where(
Strings.category,
whereIn: [Strings.climateChange])
.snapshots(),
También vea la documentación de FlutterFire sobre el Query.orderBymétodo .
Finalmente lo resolví creando un índice en la consola de Firebase y esto funcionó perfectamente, así que ahora obtengo el último primero.
En mi base de datos fui a Índices para crear un nuevo índice, agregué el nombre de mi colección, y luego para los campos agregué 'categoría' - descendente y 'marca de tiempo' - descendente, hice clic en Colección y luego en Crear índice.