如何通过在 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:如何在集合中获取随机文档

为啥这个 firestore 查询需要索引?

从firestore查询数据时,如何将保存的字符串格式的日期与当前日期进行比较?

有啥方法可以从 Firestore 中的数组更新特定索引

如何使用 Firestore 在 Flutter 中搜索文本

如何从 Firestore 导出安全和索引规则?