【问题标题】:Firestore - Get pagination cursor from denormalized dataFirestore - 从非规范化数据中获取分页光标
【发布时间】:2021-10-03 00:44:19
【问题描述】:

我有一个分页的帖子列表,每次提取时都会重新计算我的光标,并将最后一个 QuerySnapshot 文档分配给它:

// Calculate the new startAfter
if (querySnapshot.size) {
  startAfter = querySnapshot.docs[querySnapshot.docs.length - 1];
}

不知何故,使用文档快照作为光标是避免破坏分页的最“安全”的方法之一。

我正在考虑使用非规范化优化我的应用程序的某些部分。例如,由于我的应用程序的每个用户都可以上传无限的帖子,这些帖子显示在他们的个人资料上 10 x 10,因此将最后 10 个用户帖子(非规范化)添加到用户的文档(数组字段)可能是一个好主意。

这样,我避免了对每个访问过的个人资料进行前 10 个帖子获取。但是...如何分配第一个 startAfter 光标?我的意思是,是否可以在文档中写入文档快照或类似的东西以获得相同的行为?

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    如果您查看documentation for startAfter,您会看到有两个重载:

    startAfter ( snapshot : DocumentSnapshot < any > ) : Query < T >

    创建并返回一个新的Query,它在提供的文档(不包括)之后开始。起始位置与查询的顺序有关。该文档必须包含此查询的orderBy 中提供的所有字段。

    参数

    snapshot:DocumentSnapshot<any>

    要开始的文档的快照。

    startAfter ( ... fieldValues : any [] ) : Query < T >

    创建并返回一个新的Query,它在相对于查询顺序提供的字段之后开始。字段值的顺序必须与查询的 order by 子句的顺序相匹配。

    参数

    Rest ...fieldValues: any[]

    开始此查询的字段值,按照查询的顺序排列。

    由于您没有DocumentSnapshot,您可以使用第二个重载并传递相关字段值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-27
      • 2018-07-31
      • 1970-01-01
      • 2019-06-12
      • 2013-12-11
      • 2017-01-14
      • 1970-01-01
      • 2019-12-12
      相关资源
      最近更新 更多