我想按20个项目的页面对存储在Firebase中的论坛帖子进行分页,例如:
以此类推。
现在,我知道我可以使用查询游标(如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页,我担心那会花钱吗?
答案 0 :(得分:3)
使用Firestore客户端SDK时,无法在查询结果中指定偏移量。您可以在GitHub上read a discussion about this。
服务器SDK确实有offset。