Flutter & Firestore: ¿Cómo obtengo primero el más reciente?

Nov 25 2020

¿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

2 FrankvanPuffelen Nov 25 2020 at 22:34

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 .

1 SK7 Dec 21 2020 at 19:29

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.