【问题标题】:How to get a number of document from an index to other index by query in Firestore如何通过在 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 分页器,并将其更改为“加载更多”按钮。感谢您的回答

标签: angular firebase google-cloud-firestore


【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    相关资源
    最近更新 更多