Flutter&Firestore:最新のものを最初に取得するにはどうすればよいですか?

Nov 25 2020

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);
                });

と一緒.whereに使用すると、問題が発生するよう.orderByです。

回答

2 FrankvanPuffelen Nov 25 2020 at 22:34

createdAtタイムスタンプのあるフィールド、または常に増分する値がある場合は、次の方法でそのフィールドの降順でスナップショットを取得できます。

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

Query.orderByメソッドに関するFlutterFireのドキュメントも参照してください。

1 SK7 Dec 21 2020 at 19:29

Firebaseコンソールでインデックスを作成することでようやく解決しましたが、これは完全に機能したので、最新のものを最初に入手しています。

データベースで、インデックスに移動して新しいインデックスを作成し、コレクション名を追加しました。次に、フィールドに「カテゴリ」(降順)と「タイムスタンプ」(降順)を追加し、[コレクション]、[インデックスの作成]の順にクリックしました。