Firestore startAfter方法不适用于文档作为参考

sgf_1

我遇到了无法在Firestore中处理数据的startAfter问题。我给这个问题的两个例子,第一个图像是在工作时,使用属性(createdAt)进行过滤,第二个图像传递了整个文档,返回空值,并且无法使forEach遍历数据

有人知道这会发生什么吗?这些文档没有任何复杂的信息,名称,创建日期以及所有测试编号。

如果有人遇到此问题,请几天前才开始学习Firebase。提前致谢 :)

// getting the data
const response = await db
          .collection("apis")
          .orderBy("createdAt")
          .limit(3)
          .get();
        const dataSend = [];
        response.forEach((document) => {
          dataSend.push(document.data());
        });
//triggering the next data load

  const getMore = async () => {
    const limit = 3;
    const last = apis[apis.length - 1]; // last document
    console.log(last); // {name: "3", description: "3", createdAt: t, url: "3", authorId: 123123, …}

    try {
      const response = await db
        .collection("apis")
        .limit(limit)
        .orderBy("createdAt")
        .startAfter(last.createdAt) // passing createdAt to fix the problem
        .get();
      console.log(response);
      const dataSend = [];
      response.forEach((document) => {
          //this is not entering here
        dataSend.push(document.data());
      });
    } catch .....

第二例

// getting the data
const response = await db
          .collection("apis")
          .orderBy("createdAt")
          .limit(3)
          .get();
        const dataSend = [];
        response.forEach((document) => {
          dataSend.push(document.data());
        });
//triggering the next data load

  const getMore = async () => {
    const limit = 3;
    const last = apis[apis.length - 1]; // last document
    console.log(last); // {name: "3", description: "3", createdAt: t, url: "3", authorId: 123123, …}

    try {
      const response = await db
        .collection("apis")
        .limit(limit)
        .orderBy("createdAt")
        .startAfter(last) // PASSING THE WHOLE DOCUMENT AS A PARAMETER DO NOT WORK
        .get();
      console.log(response);
      const dataSend = [];
      response.forEach((document) => {
          //this is not entering here
        dataSend.push(document.data());
      });
    } catch .....
sgf_1

解决此问题的方法是,我获取的是数据而不是文档参考。

要修复此类问题,您必须在代码中添加诸如此类的内容

response.docs [response.docs.length-1]

// getting the data
const response = await db
          .collection("apis")
          .orderBy("createdAt")
          .limit(3)
          .get();
        const dataSend = [];
   const last = response.docs[response.docs.length - 1] // this is the reference to the doc that the documentations says
        response.forEach((document) => {
          dataSend.push(document.data());
        });
//triggering the next data load

  const getMore = async () => {
    const limit = 3;
    const last = response.docs[response.docs.length - 1] // last document
    console.log(last); // {name: "3", description: "3", createdAt: t, url: "3", authorId: 123123, …}

    try {
      const response = await db
        .collection("apis")
        .limit(limit)
        .orderBy("createdAt")
        .startAfter(last) //
        .get();
      console.log(response);
      const dataSend = [];
      response.forEach((document) => {
          //this is not entering here
        dataSend.push(document.data());
      });
    } catch .....

因此,您可以使用Firebase提供的data()函数进行转换之前,将最后一个引用传递给该文档,而不是传递数据库中的最后一个对象。

另外,它比传递object.createdAt更好。

参考

https://firebase.google.com/docs/firestore/query-data/query-cursors

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章