Flutter i Firestore: Jak najpierw uzyskać najnowsze?

Nov 25 2020

Jak uzyskać najnowsze pierwsze z 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);
                });

Wydaje się, że problem występuje .wherepodczas używania z .orderBy!

Odpowiedzi

2 FrankvanPuffelen Nov 25 2020 at 22:34

Jeśli masz createdAtpole z sygnaturą czasową lub inną zawsze rosnącą wartością, możesz uzyskać migawki w kolejności malejącej tego pola za pomocą:

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

Zobacz także dokumentację FlutterFire dotyczącą Query.orderBymetody .

1 SK7 Dec 21 2020 at 19:29

W końcu rozwiązałem to, tworząc indeks w konsoli Firebase i działało to idealnie, więc teraz otrzymuję najpierw najnowsze.

W swojej bazie danych przeszedłem do Indeksów, aby utworzyć nowy indeks, dodałem nazwę mojej kolekcji, a następnie dla pól dodałem „kategorię” - malejąco i „znacznik czasu” - malejąco, kliknąłem Kolekcja, a następnie Utwórz indeks.