使用时间戳/日期作为 orderBy 的 Firebase 分页

str*_*rks 5 firebase reactjs google-cloud-firestore

当我使用日期(firebase 时间戳)检索数据时,我很难使分页正常工作。

这基本上就是我所做的:

let jobsRef = db.collection("jobs")
            .orderBy('createdAt', 'desc')
            .limit(QUERY_LIMIT);
jobsRef = jobsRef.startAfter(this.props.jobs[this.props.jobs.length - 1].createdAt);
Run Code Online (Sandbox Code Playgroud)

然而,有时我似乎会收到刚收到的退货。我猜是因为日期相似?那么我怎样才能基本上返回按createdAt排序的作业列表并具有偏移/限制(分页)?

createdAt 看起来像时间戳类型:23 October 2020 at 17:26:31 UTC+2 当我记录createdAt但是我看到这个:{seconds: 1603537477, nanoseconds: 411000000} 也许我应该将createdAt存储为unix时间戳?或者说处理这个问题的理想方法是什么?

这是它在数据库中的外观(当我单击createdAt上的编辑时弹出): 在此输入图像描述

Fra*_*len 1

如果多个文档的排序字段可以具有相同的值,则传入该字段的值并不能保证指向唯一的文档。因此,您确实可能传递了一条不明确的指令,从而导致了不需要的结果。

如果可能,我强烈建议将整个文档传递给 Firestore API。这使得 Firestore 从该文档中获取必要的数据,以唯一/明确地找到查询的锚点。

所以而不是:

jobsRef.startAfter(this.props.jobs[this.props.jobs.length - 1].createdAt);
Run Code Online (Sandbox Code Playgroud)

做:

jobsRef.startAfter(this.props.jobs[this.props.jobs.length - 1]);
Run Code Online (Sandbox Code Playgroud)