Мне трудно использовать startAfterDocument()
для нумерации страниц с Firestore на Flutter. Насколько я понимаю, хотя startAfter()
будет просто начинаться там, где индекс начинается с определенного значения, startAfterDocument () будет начинаться с индекса именно после данного документа.
Однако я заметил, что при использовании startAfterDocument()
, он пропускает документы с тем же значением.
Например, учитывая следующие документы (дата - это временная метка):
{id: "1", date: "4-28-2020"}
{id: "2", date: "4-29-2020"}
{id: "3", date: "4-29-2020"}
{id: "4", date: "4-29-2020"}
{id: "5", date: "4-30-2020"}
Используя startAfterDocument(doc3)
, я ожидаю, что следующий документ будет извлечен быть Документом 4, за исключением того, что я получаю документ 5. Он пропускает все документы с таким же значением, как указано. Это предназначено функционально? Нужно ли включать .where()
для сортировки по идентификатору, чтобы это работало правильно?
РЕДАКТИРОВАТЬ: Вот код, который я использую.
CollectionReference orders = Firestore.instance.collection('orders');
Query query1 = orders.orderBy('date').limit(3);
QuerySnapshot querySnapshot = await query1.getDocuments();
DocumentSnapshot lastDoc = querySnapshot.documents.last;
Query query2 = orders.orderBy('date').startAfterDocument(lastDoc).limit(3);
QuerySnapshot querySnapshot = await query2.getDocuments();
Использование предоставленных документов выше я получаю документ 3 как lastDoc
на query1
, затем на query2
, я получаю документ 5 в качестве первого документа, когда это должен быть документ 4.
РЕДАКТИРОВАТЬ:
После некоторого дальнейшего тестирования кажется, что это происходит только с метками времени.