如何根据firestore中的项目数量进行分页或无限滚动?

时间:2018-06-19 07:03:39

标签: firebase google-cloud-firestore

要求

  1. 开始时将加载20个项目。
  2. 当用户滚动到结尾时,将会加载20个项目。
  3. 问题 Firestore查询具有startAt()endAt()方法,这些方法适用于OrderBy字段的值。我希望在索引上有所作为。

    interface Product{
       price:number;
    }
    

    假设有20个产品有100个产品,10个产品有30个产品。 可以获取第一次加载

    query
    .orderBy(price,desc)
    .limitTo(20)
    

    现在最后一件商品的价格是20美元。要加载下20个结果

    query
    .orderBy(price,desc)
    .startAt(20$)
    .limitTo(20)
    

    它将返回相同的结果。

1 个答案:

答案 0 :(得分:1)

您应该“使用文档快照来定义查询光标”,如以下文档中所述:https://firebase.google.com/docs/firestore/query-data/query-cursors#use_a_document_snapshot_to_define_the_query_cursor

因此你会这样做:

var first = db.collection("....").orderBy("price", "desc").limit(20);

return first.get().then(function (documentSnapshots) {
  // Get the last visible document
  var lastVisible = documentSnapshots.docs[documentSnapshots.docs.length-1];
  console.log("last", lastVisible);

  // Construct a new query starting at this document,
  // Get the next 20 cities.
  var next = db.collection("....")
          .orderBy("price", "desc")
          .startAfter(lastVisible)
          .limit(20);
});