查询中的 Firebase StartAfter 未按预期工作

2024-04-10

我使用 firebase firestore 作为数据库,并且编写了 firebase 函数来从 firestore 数据库检索数据。

我想要实现的是分页,根据文档我已经实现了我的 firebase 函数的代码。下面是代码:

exports.getBillList = functions.https.onRequest((req, res) => {
    let docs=[]; 
    let limit = 15;
    return cors(req, res, () => {
        let lastBillInList=req.query.lastBillInList;
        console.log("lastBillInList value: " + lastBillInList);
        if (lastBillInList === null || lastBillInList === undefined) lastBillInList = 0;
        //var lastVisible = documentSnapshots.docs[documentSnapshots.docs.length - 1];
      if(lastBillInList==0){
          console.log('first time call: as no lastbillseqq');
        db.collection("bills").orderBy('billNo','desc').limit(limit).get().then(function (querySnapshot) {
            querySnapshot.forEach(function (doc) {

                docs.push(doc.data());
            });
            res.status(200).send(docs);
        }).catch(function (error) {
            console.error("Error getting list: ", error);
            res.status(500).send();
        });
    }else{
          console.log('second time call: as no lastbillseqq'+ lastBillInList);
        db.collection("bills").orderBy('billNo', 'desc').startAfter(lastBillInList).limit(limit).get().then(function (querySnapshot) {
            querySnapshot.forEach(function (doc) {

                docs.push(doc.data());
            });
            res.status(200).send(docs);
        }).catch(function (error) {
            console.error("Error getting list: ", error);
            res.status(500).send();
        });
    }
    });

});

我在我的 firebase 函数中添加了条件,它检查是否提供了最后的账单号码。

如果是,则检索最后一张账单之后的所有账单记录,直到设定的限制,否则,如果没有提供最后一张账单号码,则将其视为第一次请求,并检索初始记录直至限制

然而,我面临的问题是,无论执行 else 部分的代码如何,当提供最后一个账单编号时,查询始终返回从结果开始到指定限制的记录。由于某种原因 StartAfter 不起作用

例如,我有帐单编号从1到25的记录,我在上面的代码中按降序排列它们,所以结果是从帐单编号25到1。

如果未提供账单号码,我会得到账单号码从 25 到 11 的结果。 当我提供帐单编号时,我得到帐单编号 25 到 11 的结果,而不是预期的帐单编号 10 到 1。

谁能帮我解决这个问题吗?


我可以通过下面的代码设法分页。在我的模型对象中,我使用了 Document ID ,根据它我找到了 documentReference -> documentSnapshot。我最终使用 documentSnapshot 进行比较(这是我的错误,因为之前我没有使用 documentSnapshot)以获得所需的输出。

下面是我的代码:

exports.getBillList = functions.https.onRequest((req, res) => {


console.log("----------------------------------function start");

    let docs = [];
    let lastBillInList=req.query.lastBillInList;
    if(lastBillInList===undefined){
        lastBillInList="noDocument";
    }
    let limit = 15;

    return cors(req, res, () => {


        var lastVisible = db.collection("bills").doc(lastBillInList);


        lastVisible.get().then(function (doc) {
            if (doc.exists) {
                db.collection("bills")
                    .orderBy("billNo", "desc")
                    .startAfter(doc)
                    .limit(limit).get().then(function(querySnapshot){

                        querySnapshot.forEach(function (doc) {
                            //console.log(doc.data().billNo + " pushed.." + ": last bill was: " + tempBill);


                            docs.push(doc.data());
                        });
                        return res.status(200).send(docs);

                    });
            } else {
                db.collection("bills")
                    .orderBy("billNo", "desc")
                    .limit(limit).get().then(function (querySnapshot) {

                        querySnapshot.forEach(function (doc) {

                            docs.push(doc.data());
                        });
                        return res.status(200).send(docs);

                    });
            }
        }).catch(function (error) {
            console.log("Error getting document:", error);
            return res.status(500).send();
        });

    console.log("----------------------------------function end");
});
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查询中的 Firebase StartAfter 未按预期工作 的相关文章

  • 解压 R 数据框中的列表

    我有一个dataframe其中一个字段包含不同长度的列表 我想将该字段中列表的每个元素提取到其自己的字段中 以便我可以将结果收集到一个很长的字段中dataframe每个列表元素都有一个 id 这是一个例子dataframe dat lt s
  • Instagram 勒克斯效果

    Instagram 最近添加了一个 Lux 按钮 可以对您拍摄的照片进行自动对比 调平 我有一堆图片需要以类似的方式自动调平 使这些图片看起来更好 如果我想在 Imagemagick 中使用批处理命令 需要使用什么 秘密成分 我应该坚持对比
  • Visual Studio 2017/2019/2022 gitsync/pull/push/fetch 操作卡住,并且无法停止

    我从 Visual Studio 中的 Git Changes 选项卡启动同步 获取 拉取或推送 但操作只是挂起 没有选项可以停止它 我必须点击 X 才能关闭 Visual Studio 如果操作是同步的 它会在其他所有操作上打开一个模式对
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 本地权威声明和外部提供商声明的混淆

    我正在创建一个简单的 WebApi 它允许用户与 Facebook 连接 当我从 facebook 获取 accessToken 时 我调用 RegisterExternal 创建 Asp Net Identity 记录并存储令牌中的声明
  • 修改 ADW Android 启动器?

    我想更改和修改开源 ADW 启动器 启动器可在此处获取 https github com AnderWeb android packages apps Launcher https github com AnderWeb android p
  • 如何移动 Zend_Layout 的“视图”

    通常它会是这样的结构 application modules somemodule views scripts index index phtml 我如何将其移动到 application templates somemodule temp
  • 期望最大化算法的数值示例[重复]

    这个问题在这里已经有答案了 由于我不确定给出的公式 有人可以提供 EM 算法的简单数字示例吗 一个非常简单的具有 4 或 5 个笛卡尔坐标的坐标就可以了 那这个呢 http en wikibooks org wiki Data Mining
  • 使用 eclipse IDE 配置 angularjs

    我想开始使用 AngularJs 和 Java Spring 进行开发 我使用 Eclipse 作为 IDE 我想配置我的 Eclipse 以使这些框架无缝工作 我知道我可能要求太多 但相信我 我已经做了很多研究 你们是我最后的选择 任何帮
  • 如何获取 URL 中未知的 $_GET 值的数组?

    我正在使用一个在线购物车 它接受订购的商品并通过 URL 将其唯一 ID 传递到 process php 页面 所以 URL 看起来像这样 process php code 1 231 code 2 532 code 3 342 Anoth
  • 使用 Python 生成类似于 Messenger 或 kik 代码的圆形二维码

    我可以使用 Python 生成圆形 QR 码 就像 Facebook Messenger 或 kik 使用的那样吗 我访问了很多网站 但找不到这种类型的二维码 默认情况下 Python 生成方形 QR 码 但在我的项目中我想要圆形 QR 码
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 如何显示 PHP 对象

    我有这样的代码 dataRecord1 client gt GetRecord token table filter echo pre print r dataRecord1 echo pre foreach dataRecord1 gt
  • 为什么这个函数在额外读取内存时运行速度如此之快?

    我目前正在尝试了解 x86 64 上某些循环的性能属性 特别是我的 Intel R Core TM i3 8145U CPU 2 10GHz 处理器 具体来说 在循环体内添加一条额外的指令来读取内存几乎可以使性能提高一倍 而细节并不是特别重
  • 尝试使用带有有效购买令牌的 Java Google Play Developer API v3 检索应用内购买信息时出现错误请求(无效值)

    当使用 Java Google Play Developer API 版本 3 并请求有效购买令牌的购买信息时 我收到以下异常 API 调用返回 400 Bad Request 响应以及以下消息 code 400 errors domain
  • 如何为React hooks(useState等)做流类型注解?

    我们应该如何将 Flow 类型注释与 React hooks 一起使用 例如useState 我尝试寻找一些如何实施它们的示例 但找不到任何东西 我试过这个 const allResultsVisible setAllResultsVisi
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 如何.release()由RingtoneManager实例化的MediaPlayer?

    我在我的活动中收到默认铃声 remindRingtoneView TextView findViewById R id remind ringtone remindRingtoneView setText RingtoneManager g
  • sas7bdat 变量名称中带有空格

    我收到了几个扩展名为 sas7bdat 的 SAS 数据集文件 我在 Windows 上使用 SAS 9 3 这些文件的创建者显然使用了不同的环境和 或软件 许多文件的 var 名称包含空格和其他无效字符 甚至运行一个proc conten
  • 从 WPF 中的代码设置验证错误模板

    我的 WPF 应用程序中有一个文本框 我定义了一个用于验证错误的 ControlTemplate 如下所示
  • 忽略或解决机器人框架中测试自动化的证书警告

    使用机器人自动化框架浏览 URL 时 我总是收到一条消息 您的连接不是私有的 然后我们需要单击 高级 并继续访问 URL 无法手动继续访问 URL 那么有没有解决方案可以跳过机器人框架中测试自动化的此类证书检查 我读过这个问题的答案 如何解
  • java中正则表达式执行太慢[重复]

    这个问题在这里已经有答案了 我的目的是匹配这种不同的网址 网址 commy url commy extend url coma super extended url com等等 因此 我决定构建正则表达式 在 url 的开头和结尾处包含一个
  • Angular - 如何使用延迟加载模块激活 AUX 路由?

    我有一个有角度的应用程序正在延迟加载模块 首先 应用程序导航到home它加载模块 名为module1 主要路由 const routes Routes path redirectTo home pathMatch full path hom
  • 编写自定义属性检查器 - 验证值时如何处理就地编辑器焦点?

    Overview 我正在尝试编写自己的简单属性检查器 但我面临着一个困难且相当令人困惑的问题 首先 我要说的是 我的组件并不是要使用或处理组件属性 而是允许向其添加自定义值 我的组件的完整源代码位于问题的更下方 一旦将其安装在包中并从新的空
  • C# 和 Java 中的垃圾收集之间的根本区别是什么?

    最近 我从一位 高级 开发人员 同事那里得到了一些关于 C 垃圾收集器的听起来非常错误的建议 例如 你需要使用析构函数 C 中随处可见 因为垃圾 收藏家不能信赖 C 垃圾收集器不能 就像 Java 垃圾一样 集电极 这对我来说听起来非常可疑
  • 推送通知徽章未到来

    我正在使用此编码进行苹果推送通知 推送通知即将到来 但它们没有任何徽章 任何建议此代码有什么问题 我没有收到徽章 我已经检查了设置选项卡 徽章就在那里 BOOL application UIApplication application d
  • CircleCI Android ConstraintLayout 不起作用

    我现在正在使用CircleCI对于我的项目 我也在实施新的约束布局在我的项目中 现在我被 CircleCI 大楼困住了 它向我展示了这个gradle 依赖项 run File home ubuntu android repositories
  • X 轴垂直线 iOS 图表

    也许这是一个简单的问题 但我想知道如何在 iOS 图表中的 X 轴下绘制垂直线和 X 轴上的标签 见图 如红线所示 更新 我正在使用的库是这个https github com danielgindi ios charts https git
  • 显示 JPanel 调整了另一个 JPanel 的大小

    我有一个关于嵌套 BoxLayout 的问题 我想构建一个由 2 个子面板组成的 DropDownPanel 顶部的标题和底部的正文 身体最初是隐藏的 通过单击标题 您可以切换正文的可见性并显示其内容 例如展开 折叠 一般来说 这工作得很好
  • “cabal install cabal-install”不会更新 OSX 中的 cabal 版本

    我是 haskell 和 cabal 的新手 所以我可能错过了一些简单的东西 我更新了 cabal install sudo cabal install cabal install Password Resolving dependenci
  • 如何使用 Git API 获取 GitHub 存储库的社交预览图像链接?

    我拥有许多 GitHub 存储库 通常每周添加项目 我正在使用 GitHub 页面制作自己的网站 因为我只能在 GitHub 页面上托管静态网站 因此我将使用 GitHub API 来自动更新网站上的新项目 但我还想向其中添加预览 示例图像
  • 无法切换到打瞌睡模式

    我正在遵循这方面的说明安卓页面 http developer android com training monitoring device state doze standby html为了将 android 切换到 doz 模式来测试我的
  • 如何构建增量有向非循环词图来存储和搜索字符串?

    我试图以简洁的方式存储大量字符串列表 以便可以非常快速地分析 搜索它们 有向非循环词图 DAWG 非常适合这个目的 但是 我首先没有要包含的字符串列表 因此它必须是可增量构建的 此外 当我在其中搜索字符串时 我需要带回与结果相关的数据 而不
  • 如何重用现有分支名称作为新分支?

    我的目的是拥有一个开发分支 我可以在其中创建功能分支 这些功能分支将被合并到 dev 分支 然后 dev 分支将被合并回 master 一些我如何搞砸了 我留下了我的开发分支 所以这就是我现在所拥有的 我认为将password rest a
  • 支持 RecyclerView 在触摸之前不显示任何内容

    我在我的应用程序中使用支持 RecyclerView 我看到了最奇怪的事情 在我触摸滚动之前它不会显示任何项目 然后 突然间 RecyclerView 就会自行填充 我已经验证支持适配器的列表已填充 并且 onCreatViewHolder
  • Oracle 11 SQL:有没有办法将 1 行拆分为 x 行

    客户要求将 Oracle DB SQL 中的 1 行拆分为 6 行 比方说 最初的 SQL 具有多个连接的复杂 sql 等 拉入 9 列 从 X Y Z 中选择 A B C D E F G H I 但查询相当复杂 1 A B C D E F
  • 查询中的 Firebase StartAfter 未按预期工作

    我使用 firebase firestore 作为数据库 并且编写了 firebase 函数来从 firestore 数据库检索数据 我想要实现的是分页 根据文档我已经实现了我的 firebase 函数的代码 下面是代码 exports g