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コンソールでインデックスを作成することでようやく解決しましたが、これは完全に機能したので、最新のものを最初に入手しています。
データベースで、インデックスに移動して新しいインデックスを作成し、コレクション名を追加しました。次に、フィールドに「カテゴリ」(降順)と「タイムスタンプ」(降順)を追加し、[コレクション]、[インデックスの作成]の順にクリックしました。