如何通过在 Firestore 中的查询从索引中获取多个文档到其他索引
Posted
技术标签:
【中文标题】如何通过在 Firestore 中的查询从索引中获取多个文档到其他索引【英文标题】:How to get a number of document from an index to other index by query in Firestore 【发布时间】:2018-06-21 12:40:01 【问题描述】:我想对存储在云Firestore
中的数据进行分页。看起来是这样的:
注意,它不同于加载更多或无限加载。假设,当用户点击 pager 3 时,我需要向我的Firestore
发出请求,以获取从位置 50 到 75 的 25 个项目(每页 25 个项目)。
我应该这样做:
db.collection("cities")
.orderBy("population")
.startAfter(lastVisible)
.limit(25);
这里的问题是我没有lastVisible
。我知道我们可以通过获得前 50 个项目来获得lastVisible
,但这太愚蠢了,因为如果我喜欢这样做,为什么不
我只获取前 75 个项目并在客户端过滤我们想要的内容。
问题是:如何在Firestore
中通过查询从一个索引获取多个项目到另一个索引?
任何帮助,将不胜感激!非常感谢!
【问题讨论】:
您找到解决方案了吗?我需要解决这样的问题。 @JancoBoscan:很遗憾,我没有找到解决方案。我认为我们必须改用无限加载 ok = (,今天我放弃了,我删除了我的 angular material 2 分页器,并将其更改为“加载更多”按钮。感谢您的回答 【参考方案1】:您可以将文档 id 推送到数组并使用查询集合
firebase.firestore().collection("users").where(firebase.firestore.FieldPath.documentId(), "in", array)
您可以进一步检索数组索引位于(pages10 和 pages-110)之间的数组,其中 page 是您的当前页面
【讨论】:
【参考方案2】:Classic Pagination 非常适合与表格结合使用,不幸的是,当时 Firestore 并没有很好地支持它。
我建议您将限制数据的方法切换为 Infinte-Scroll
结合强大的过滤选项,您可以归档更好的用户体验
您可以在 Firebase 文档中找到一个方便的示例:https://firebase.google.com/docs/firestore/query-data/query-cursors#paginate-a-query
更多信息:https://uxplanet.org/ux-infinite-scrolling-vs-pagination-1030d29376f1
【讨论】:
感谢您的建议,但我只想找到分页的解决方案,因为它是我的最佳选择。【参考方案3】:更新答案:
您可以维护一个大小数组作为确定的页面数。每个索引处的值将表示您的 cities
字段的 startAt
字段值。
此外,您还将维护您的文档数量。这将帮助您给出限制值 (count / numberOfPages
)。
您将在云功能触发器的帮助下维护这两者,如 here 所述。
【讨论】:
感谢您的回复。分布式计数器对我来说是新的。我会看看它并返回结果 不客气。分布式计数器只是一种解决 firestore 限制的技术,即您每秒不能多次编辑 firestore 文档。因此,如果您知道您的“项目”计数可能每秒更改一次以上,那么将计数存储在一个文档中将是一个问题。因此,您可以通过使用多个子计数器来解决这个问题(然后通过每次聚合子计数器的值来计算总计数)。 让我们假设,我的项目总数 = 100。我将每页显示 25 个项目,因此将有 4 页。但是我如何确定每个页面的startAfter
(或endBefore
)?
你知道你有 100 个项目。你知道你已经决定有 4 页。您现在只需保存一个整数数组(比如说,表示 endBefore):[25,50,75,100]。该数组现在包含与您的页码对应的索引处的 endBefore 值。你甚至可以直接在你的计数文档中维护这个数组。
假设,我手里有所有这些数据。但是我无法从位置 50 到 75 获得 25 件物品,因为我不知道位置 50 和 75 的物品。唯一的方法是获得所有 100 件物品并执行splice
。以上是关于如何通过在 Firestore 中的查询从索引中获取多个文档到其他索引的主要内容,如果未能解决你的问题,请参考以下文章
从firestore查询数据时,如何将保存的字符串格式的日期与当前日期进行比较?