【问题标题】:Firestore Pagination: How do I load the next set of data using JavascriptFirestore 分页:如何使用 Javascript 加载下一组数据
【发布时间】:2021-04-22 21:56:52
【问题描述】:

这是我加载集合中前 100 个文档的代码:

db.collection("books").where("ItemType", "==", "Book").limit(100)
        .get()
        .then(querySnapshot=>{
                querySnapshot.forEach(doc=>{
                    console.log(doc.data())
                    let data = doc.data();
                    let row  = `<tr>
                                    <td>${data.Title}</td>
                                   
                            </tr>`;
                    let table = document.getElementById('myTable')
                    table.innerHTML += row
                })
            })
            .catch(err=>{
                console.log(`Error: ${err}`)
            });

如何在按下按钮后继续加载接下来的 100 个文档?

function LoadMore(){
    //Load 100 more documents
} 

【问题讨论】:

    标签: javascript firebase google-cloud-platform google-cloud-firestore


    【解决方案1】:

    您可以使用startAt(doc)startAfter(doc)。 只需提供上次查询中文档的字段值或 DocumentSnapshot。

    在你的情况下是:

    db.collection("books").where("ItemType", "==", "Book")
    .startAfter(lastDocFromFirstQuery).limit(100).get();
    

    回答您编辑的问题

    // define this somewhere globally
    let lastDoc;
    
    // use just this function
    function queryBooks() {
      let query;
    
      // if lastDoc is already defined then use it as a reference point for firestore
      if (lastDoc != null) {
        query = fsDb.collection("books").where("ItemType", "==", "Book").startAfter(lastDoc);
      } else {
        query = fsDb.collection("books").where("ItemType", "==", "Book");
      }
    
      query.limit(100).get().then(querySnapshot=>{
    
            lastDoc = querySnapshot.docs[querySnapshot.docs.length - 1];
    
            querySnapshot.forEach(doc=>{
              console.log(doc.data())
              let data = doc.data();
              let row  = `<tr>
                                    <td>${data.Title}</td>
                                   
                            </tr>`;
              let table = document.getElementById('myTable')
              table.innerHTML += row
            })
          })
          .catch(err=>{
            console.log(`Error: ${err}`)
          });
    }
    

    【讨论】:

    • 能否请您告诉我如何提供上次查询文档的 DocumentSnapshot,谢谢
    • let lastDocSnapshot = querySnapshot.docs[querySnapshot.docs.length - 1]; 您也可以输入 99,但最好这样做,因为您不知道您是否会阅读 100 个文档,而您只能阅读 50 个。因此,您将检索最后一个文档,那么你应该存储它,当用户请求下一个文档时,使用它。
    • 您好,我的问题内容已更新
    • 我也编辑了我的答案,它回答了问题吗?
    • 您好,感谢您的帮助。我尝试使用相同的代码,它显示与以前相同的 100 个文档
    猜你喜欢
    • 1970-01-01
    • 2021-05-19
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多