Flutter & Firestore: come ottengo prima il più recente?

Nov 25 2020

Come ottengo il primo più recente da 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);
                });

Il problema sembra riguardare .wherequando si utilizza con .orderBy!

Risposte

2 FrankvanPuffelen Nov 25 2020 at 22:34

Se hai un createdAtcampo con un timestamp, o un valore altrimenti sempre crescente, puoi ottenere gli snapshot in ordine decrescente di quel campo con:

stream: FirebaseFirestore.instance
  .collection(Strings.factsText)
  .orderBy('timestamp', descending: true)
  .where(
    Strings.category,
    whereIn: [Strings.climateChange])
    .snapshots(),

Vedere anche la documentazione FlutterFire sul Query.orderBymetodo .

1 SK7 Dec 21 2020 at 19:29

Alla fine l'ho risolto creando un indice nella console Firebase e questo ha funzionato perfettamente, quindi ora ricevo prima l'ultima.

Nel mio database sono andato su Indici per creare un nuovo indice, ho aggiunto il nome della mia raccolta, quindi per i campi ho aggiunto "categoria" - discendente e "timestamp" - discendente, ho fatto clic su Raccolta e poi su Crea indice.