Firebase 一次性函数

标签 firebase google-cloud-firestore google-cloud-functions firebase-admin

我确信这些是常见的场景,但在研究了几个小时后,我无法真正找到常见的做法是什么。也许在 Firebase 方面有更多经验的人可以为我指明正确的方向。
我有两个特定的场景:

1. 运行一次的代码
示例 1:向 firestore 中的所有用户添加新数据,这是新功能所必需的
示例 2:开始将数据复制到现有文档中
我目前在云函数中编写代码,并在 firestore 事件(“隐藏”文档的 onUpdate)上运行它,然后如果一切顺利,我会立即删除该函数。
我还增加了这个函数的超时和内存,因为这个想法是潜在地更新数百万个文档。

2. 从 firebase 控制台(或命令行)手动触发功能
示例:在应用程序中授予用户管理员权限(设置自定义声明和 Firestore 数据的功能)。我们没有时间实现后台,因此从 firebase 门户网站/控制台执行此操作是理想的,指定用户 ID。
我目前的解决方案是使用 https function ,并从 GCP 门户运行它(在函数的“测试”选项卡上,能够传递 json)。但是该功能可以公开触发,我真的不喜欢......

这些场景的常见做法是什么?

最佳答案

扩展我的评论:如果你想创建一个节点脚本来运行一次性代码,你只需像任何云函数一样编写你的 JS 代码,但只需立即运行它。像这样的东西。

const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();

db.collection('users')
  .where('myField', '==', true)
  .get()
  .then(querySnapshot => {
    querySnapshot.docs.forEach(doc => {
      // update doc
    });
  });

如果你把它保存为 script.js 并用 node script.js 执行它您将被指向下载带有凭据的 JSON 文件。按照说明操作,然后您可以再次运行该脚本,现在您可以从命令行在 Firestore 上运行您自己的代码。

关于Firebase 一次性函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60555467/

相关文章:

java - Firebase 自动删除记录

firebase - Firestore 获取文档的值不在数组中?

javascript - 如何从新的 `firebase.firestore.FieldValue.serverTimestamp()` 获取 JavaScript 日期对象

json - 如何使用 Flutter 访问 Firestore 中特定配方的 documentId?

firebase - 使用Firebase的基于角色的Flutter应用程序

javascript - 有没有办法在创建 Firebase 云函数的同一文件中调用非云函数?

python - 在 Python 中写入流式传输到 Google Cloud Storage

javascript - 如何从 Firebase 管理员获取 Facebook ID?

java - 连接丢失后 Firebase Firestore 需要很长时间才能重新连接

javascript - 用于推送通知的Firebase云功能不起作用