Flutter & Firestore: Comment puis-je obtenir le plus récent en premier?

Nov 25 2020

Comment puis-je obtenir le plus récent d'abord auprès 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);
                });

Le problème semble être .wherelié à l'utilisation avec .orderBy!

Réponses

2 FrankvanPuffelen Nov 25 2020 at 22:34

Si vous avez un createdAtchamp avec un horodatage, ou une valeur toujours incrémentée, vous pouvez obtenir les instantanés dans l'ordre décroissant de ce champ avec:

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

Consultez également la documentation FlutterFire sur la Query.orderByméthode .

1 SK7 Dec 21 2020 at 19:29

Je l'ai finalement résolu en créant un index dans la console Firebase et cela a parfaitement fonctionné, alors maintenant je reçois la dernière en premier.

Dans ma base de données, je suis allé aux index pour créer un nouvel index, j'ai ajouté le nom de ma collection, puis pour les champs, j'ai ajouté «catégorie» - décroissant et «horodatage» - décroissant, j'ai cliqué sur Collection puis sur Créer un index.