【发布时间】:2019-04-21 20:40:07
【问题描述】:
我想使用 Firestore 对我的查询进行分页,因为我有一个非常大的集合(超过 2 万个文档正在增长)。通过分页,我的意思是向我的用户显示一组数字,如果他点击一个,它会将他重定向到我收藏的特定块,并且只有在他点击时才会获取这个块。例如,如果我有 100 个文档,并且我想每页显示 10 个,我有一个从 1 到 10 的数字数组。用户每次点击时,它会加载 10 个产品。
感谢startAfter() 方法和查询游标上的doc,我轻松实现了无限滚动。
但是,尝试遵循相同的分页文档我就是不明白。我也尝试关注这个tutorial。
这是我目前的代码:
let filteredProductsCollection = new Promise(function(resolve, reject) {
productsCollection
.orderBy("productName")
.where(
req.query.where.field,
req.query.where.comparison,
req.query.where.value
)
.startAfter(
req.query.lastProduct
)
.limit(req.query.limit)
.get()
.then(collection => resolve(collection))
.catch(err => reject(err));
}
然后我接受承诺并保存最后一个文档
.then(snapshot => {
let snapshots = {
last
};
snapshot.forEach(doc => {
snapshots[doc.id] = {
...doc.data(),
id: doc.id
};
});
res.status(200).send(data)
})
考虑到当前块(保存在 lastProduct 中),这会获取下一个产品块,让我可以进行完美的无限滚动。
我的主要问题是我不知道如何从它跳转到分页功能。两个主要问题:
- 我不知道我的查询中总共有多少文档,因此我无法向我的用户显示数字数组
- 即使我有这个数组,我将如何检索不直接与已加载的前一个块相邻的特定块?例如,如果我的用户当前在第 1 页,如何查询第 8 页?
似乎所有的教程都直接旨在描述如何进行分页,但我无法理解。我对分页的定义是错误的吗?或者当它实际上是一个“获取下一个数据块”功能时,他们是否称此功能分页......?
【问题讨论】:
标签: node.js google-cloud-firestore