Безопасно ли использовать startAfter / startAt с временной меткой orderBy Firestore, когда ее гранулярность составляет микросекунды? - PullRequest
0 голосов
/ 01 декабря 2018

Кажется, что гранулярность Timestamp выражена в микросекундах, а не в наносекундах, так как я получаю следующий вывод при регистрации Timestamp, сгенерированного сервером Firestore:

Timestamp { _seconds: 1543528094, _nanoseconds: 446000000 }

Последние 6 цифр _nanoseconds всегда равно 0.

Итак, когда я сделаю orderBy('createdAt').startAfter(lastDocSnapshot), он пропустит все документы с одинаковым значением createdAt метки времени и начнёт со следующего значения метки времени?Или он начнется сразу после последнего снимка документа, как следует из названия, даже если есть другие документы с таким же значением метки времени?

1 Ответ

0 голосов
/ 01 декабря 2018

Ваше первое утверждение неверно.Гранулярность отметки времени указывается в наносекундах, а не в микросекундах.Временная метка хранит смещение от эпохи Unix в секундах, а затем добавляет дробное число секунд (выраженное в нанослоях) в дополнение к этому.Обратитесь к документации по API Android для отметка времени для получения более подробной информации.

Внутренне Firestore понимает, как использовать оба компонента для выполнения точных хронологических сравнений момента времени, представленного отметкой времени.Это работает именно так, как вы ожидаете, что это будет работать.Там нет магии.Отметка времени, представляющая момент времени, который позже, чем другая отметка времени после второй отметки времени.Тот факт, что представление на стороне клиента использует два числа, не имеет значения для наблюдаемого порядка упорядочения.

...