すべてのドキュメントを保存するためにfirebase cloud firestoreを使用しているフラッターアプリケーションに取り組んでいます。私のドキュメントには、次のような形式のstartDateTimeフィールドがあります...
StartDateTimeが現在の日付以上のすべてのレコードをフェッチしたい。これがこれを行うための私のばたコードです...
Firestore.instance.collection("trips")
.where("trip.createdByUID", isEqualTo: this.userDetails['id'])
.where("trip.startDateTime", isGreaterThanOrEqualTo: new DateTime.now().toString() )
.getDocuments().then((string) {
print('Firestore response111: , ${string.documents.length}');
string.documents.forEach((doc) => print("Firestore response222: ${doc.data.toString()}" ));
})
しかし、これは機能していません。 isGreaterThanOrEqualTo
の使用方法が理解できないため、機能しません。
いくつかのガイダンスが必要です。
このクエリだけを渡します
.where("trip.startDateTime", isGreaterThanOrEqualTo: new DateTime.now())
FirebaseはDart DateTime
オブジェクトをTimestamp Firebaseオブジェクトに自動的に変換するため。オブジェクトを保存するときも同じようにする必要があります。
オブジェクトタイプがタイムスタンプである場合は、右側に表示されます。
これが機能しない場合は、作成時に別のオブジェクトを数値形式で保存できます。次に、比較するのは簡単です。次のような数値のdateTimeを取得できます。
new DateTime.now().millisecondsSinceEpoch
私はそれをiOSで動作させました。以下のコードを確認してください。
DateTime _now = DateTime.now();
return StreamBuilder<QuerySnapshot>(
stream: _store
.collection('rides')
.orderBy('rideDate')
.orderBy('rideType')
.where('rideDate', isGreaterThan: _now)
.snapshots(),