Firestore startAfterDocument () пропускает документы с тем же значением Timestamp - PullRequest
0 голосов
/ 30 апреля 2020

Мне трудно использовать 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.

РЕДАКТИРОВАТЬ:

После некоторого дальнейшего тестирования кажется, что это происходит только с метками времени.

1 Ответ

0 голосов
/ 30 апреля 2020

Я думаю, это может быть связано с orderBy? Вы уверены, что ваш запрос получает тот же заказ, что и ожидалось? Учитывая, что в некоторых документах есть одинаковые date?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...