Flutter e Firestore: Como faço para obter o mais recente primeiro?

Nov 25 2020

Como obtenho o mais recente primeiro do 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);
                });

O problema parece ser .whereao usar com .orderBy!

Respostas

2 FrankvanPuffelen Nov 25 2020 at 22:34

Se você tiver um createdAtcampo com um carimbo de data / hora ou um valor sempre crescente, poderá obter os instantâneos em ordem decrescente desse campo com:

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

Consulte também a documentação do FlutterFire sobre o Query.orderBymétodo .

1 SK7 Dec 21 2020 at 19:29

Eu finalmente resolvi isso criando um índice no Firebase console e funcionou perfeitamente, então agora estou obtendo o mais recente primeiro.

Em meu banco de dados, fui para Índices para criar um novo índice, adicionei o nome da minha coleção e, para os campos, adicionei 'categoria' - decrescente e 'carimbo de data / hora' - decrescente, cliquei em Coleção e em Criar índice.