降順の日付プロパティで並べ替える必要があるfirestoreのリストをクエリし、startAfterカーソルを使用して結果をページ分割しようとしています。
以下のスニペットでわかるように、orderBy( 'date'、 'desc')とstartAfter(lastDoc.date)を組み合わせると、これは失敗します。
私は何を間違っているのだろうと思っています。何か案は?
// this actually works
// but it is sorted by ascending dates
db.collection('tanks')
.doc(tankId)
.collection('documentations')
.orderBy('date')
.startAfter(lastDoc.date)
.limit(pageSize)
.get()
// this even works...
// but has no cursor (startAfter) set for pagination
db.collection('tanks')
.doc(tankId)
.collection('documentations')
.orderBy('date', 'desc')
.limit(pageSize)
.get()
// this is what i need
// but it returns always zero results
db.collection('tanks')
.doc(tankId)
.collection('documentations')
.orderBy('date', 'desc')
.startAfter(lastDoc.date)
.limit(pageSize)
.get()
実際のドキュメントのスナップショットを日付値ではなくstartAfter
に渡す必要があります。
_db.collection('tanks')
.doc(tankId)
.collection('documentations')
.orderBy('date', 'desc')
.startAfter(lastDoc)
.limit(pageSize)
.get()
_
startAfter()
のリファレンスドキュメントを参照してください。
これは実際に機能していますが、なぜ以前は機能しなかったのかはわかりません...
const snapshot = lastDoc
? await Api.db.collection('tanks')
.doc(tankId)
.collection('documentations')
.orderBy('date', 'desc')
.startAfter(lastDoc.date)
.limit(pageSize)
.get()
: await Api.db.collection('tanks')
.doc(tankId)
.collection('documentations')
.orderBy('date', 'desc')
.limit(pageSize)
.get();