javascript - 如何使用 Google Cloud Function 高效删除旧的 Firebase Cloud 文档?

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

我目前正在使用以下计划的云功能来删除超过 24 小时的任何分配或职责(文档)。功能正常,文档删除成功。

但是,该函数正在报告大量的读取。似乎每一项任务或职责都被“读取”,无论它是否需要删除。据我了解,查询确实算作阅读,除非它们返回所使用的 querySnapshot 中的文档?例如。任何被删除的文档都会有一个读取和删除。

有谁知道如何优化它以仅读取必须删除的文档?或者是否有更简单的方法使用 Google Cloud Function 删除旧的 Cloud Firebase 文档?我本以为这是一件很常见的事情。

* 使用 collectionGroup 更新了 #2 并正确使用了 Promise(感谢您的帮助!)*

同样的问题:当函数运行时,显示 844 个读取和 1 个删除。绝对没有其他来源读取数据。峰值仅在运行该函数后立即发生(使用 Google Cloud Scheduler - 立即运行)

有趣的是,如果没有要删除的文档,则不会记录任何读取。但如果有 > 1 个文档要删除,则有数百个读取。目前整个系列中只有大约 120 个职责!似乎每个任务都被读取了多次!?

Reads Spike right after the function runs

enter image description here

谢谢!

exports.scheduledCleanOldDutiesCollection = functions.pubsub.schedule('0 3 * * *')
    .timeZone('America/Chicago')
    .onRun((context) => {
        const dateYesterday = new Date(new Date().getTime() - (24 * 60 * 60 * 1000));   // 24 hours
        return db.collectionGroup('duties').where('date', '<', dateYesterday).get()
            .then(querySnapshot => {
                const promises = [];
                querySnapshot.forEach(doc => {
                    promises.push(doc.ref.delete());
                });
                return Promise.all(promises);
            });
    });

最佳答案

正如 Doug 在他的评论和官方 video series 中所解释的那样,您的代码必须返回一个只有在所有异步工作完成后才能解析的 Promise,否则 Cloud Function 将提前终止。

您可以使用Promise.all()按如下方式调整您的代码:

exports.scheduledCleanOldDutiesCollection = functions.pubsub.schedule('0 3 * * *')
    .timeZone('America/Chicago')
    .onRun((context) => {
        const dateYesterday = new Date(new Date().getTime() - (24 * 60 * 60 * 1000));   // 24 hours
        return db.collectionGroup('duties').where('date', '<', dateYesterday).get()
            .then(querySnapshot => {
                const promises = [];
                querySnapshot.forEach(doc => {
                    promises.push(doc.ref.delete());
                });
                return Promise.all(promises);
            });
    });

关于javascript - 如何使用 Google Cloud Function 高效删除旧的 Firebase Cloud 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60824825/

相关文章:

Python:pandas 数据框上的多处理错误:客户端具有非平凡的状态,是本地的且无法处理的

google-app-engine - Google Cloud Platform App Engine Node Flexible Instance Ruby 占用 50% RAM

javascript - 调用时无法读取未定义的属性 X

php - jquery和ajax加载php内容

ios - 无法从 podfile 更新 firebase 最新框架

ios - Firebase 在启动时随机崩溃

google-cloud-platform - 我不想为我想与之共享 bigquery 数据集的外部用户生成服务帐户 - 这会产生什么影响?

php - 分页不显示

javascript - 缺少 ) 在使用异步等待的参数列表之后

node.js - Google App Engine 柔性环境上的多个 NodeJS 服务/模块