在粒度为微秒的情况下,将startAfter / startAt与orderBy Firestore的时间戳一起使用是否安全?

时间:2018-11-30 21:00:44

标签: timestamp google-cloud-firestore

似乎时间戳的粒度是微秒,而不是纳秒,因为当我记录由Firestore服务器生成的时间戳时,我得到以下输出:

Timestamp { _seconds: 1543528094, _nanoseconds: 446000000 }

_nanoseconds的后6位始终为0。

因此,当我执行orderBy('createdAt').startAfter(lastDocSnapshot)时,它将跳过具有完全相同的createdAt时间戳值的所有文档,并从下一个时间戳值开始吗?还是会像名称中提示的那样,在最后一个文档快照之后立即开始?即使其他文档具有相同的时间戳值?

1 个答案:

答案 0 :(得分:0)

您的第一个陈述不正确。时间戳粒度以纳秒为单位,而不是微秒。时间戳以秒为单位存储距UNIX纪元的偏移量,然后再加上小数秒(表示为nanos)。有关更多详细信息,请查看Android API文档中的Timestamp

在内部,Firestore了解如何使用这两个组件对Timestamp表示的时间点进行准确的时间顺序比较。它的工作方式与您期望的完全一样。没有魔术。表示某个时间点晚于第二个时间戳记之后的另一个时间戳记的时间戳记。客户端表示使用两个数字这一事实对其观察到的订购行为无关紧要。