如何按单个页面分页Firestore数据集?

时间:2018-08-13 20:25:03

标签: javascript firebase google-cloud-firestore

我想按20个项目的页面对存储在Firebase中的论坛帖子进行分页,例如:

  • 用户访问foo.com/1 ->最近有20条帖子已加载
  • 用户访问foo.com/2 ->帖子21-40已加载

以此类推。

现在,我知道我可以使用查询游标(如here所述),例如,无限滚动,因为在那里我从1-> 2-> 3页开始,依此类推,并且每次我有.startAfter(lastVisible)方法中可以引用的最后一个可见文档时。

但是如果我希望用户能够访问例如第13页直接查看文章241-260?有没有一种方法可以从页面文档241开始,而无需首先进行(多个)查询来获取lastVisible文档?

添加:

这可能非常糟糕,因此请谨慎实施以下内容。我找到了以下方法来“解决”此问题:

const pageNo = 1 /* variable */
const postsPerPage = 20

const baseRef = fireDb.collection("posts")

let currentPageRef

if (pageNo === 1) {
  currentPageRef = baseRef.limit(postsPerPage)

} else {

  let lastVisibleRef = baseRef.limit((pageNo-1) * postsPerPage)
  const lastVisibleQuerySnapshot = await lastVisibleRef.get()
  const lastVisiblePost = lastVisibleQuerySnapshot.docs[lastVisibleQuerySnapshot.docs.length-1]

  currentPageRef = baseRef.startAfter(lastVisiblePost).limit(postsPerPage)
}
const currentPageQuerySnapshot = await currentPageRef.get()

这需要两个查询。但是它实现了我想要实现的目标。谁能判断该解决方案的效率/计费有多糟糕?例如。如果有人可以访问第999页,我担心那会花钱吗?

1 个答案:

答案 0 :(得分:3)

使用Firestore客户端SDK时,无法在查询结果中指定偏移量。您可以在GitHub上read a discussion about this

服务器SDK确实有offset