Firebase 数据库触发器 - 从快照中获取数据库对象

克米特

我正在编写一个 Firebase 数据库触发器函数来向多个用户推送通知。为了保持一致性,我想对所有写入操作进行批处理,但在创建批处理时遇到了问题。

如何从数据快照中获取对数据库的引用?

const functions = require('firebase-functions')
const admin = require('firebase-admin')

exports.onNoteCreate = functions
.region('europe-west1')
.database
.ref('/notes/{noteId}')
.onCreate((snapshot, context) => {
  //Get a reference to the database - this does not work!
  const db = snapshot.getRef()
  ...
  const notificationObject = {"test": true}
  //Run database batched operation - prepare batch
  let batch = db.batch()
  peopleToAlert.forEach((personId, index) => {
    //Write notification to all affected people
    const notificationId = db.ref().push()
    const batchWrite = db.collection(`/notifications/${personId}/notes`).doc(notificationId)
    batch.set(batchWrite, notificationObject)
  })
  //Commit database batch operation
  return batch.commit().then(() => {
    return new Promise( (resolve, reject) => (resolve()))
  }).catch( (err) => {
    return new Promise( (resolve, reject) => (reject(err)))
  })
})

我也试过下面的方法无济于事

const db = admin.database()

任何澄清非常感谢!亲切的问候/K

雷诺塔内克

要从 a 获取数据库的根引用DataSnapshot,请执行以下操作:

const snapshotRef = snapshot.ref.root;

请参阅https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot#refhttps://firebase.google.com/docs/reference/js/firebase.database.Reference.html#root


但是,您正在使用实时数据库触发器触发您的云功能,而批量写入的概念是针对Firestore 的,后者是一种不同的数据库服务。因此,您不能使用实时数据库的根引用来创建 Firestore WriteBatch

因此,如果您想WriteBatch在您的 Cloud Functions 中创建一个,您需要从 Admin SDK 中获取它,如下所示:

let batch = admin.firestore().batch();

请参阅https://firebase.google.com/docs/reference/admin/node/admin.firestore

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Firebase数据库触发器onUpdate

用于Firebase数据库的Cloud Functions触发器?

Firebase数据库触发器:onCreate,onUpdate,onDelete

OnUpdate Firebase数据库触发器

Firebase 实时数据库 - 数据库触发器结构最佳实践

从Cloud Functions for Firebase中的数据库触发器中获取用户ID?

如何使用Firebase Cloud函数http触发器从Firebase数据库获取数据

Firebase的Cloud Functions-从数据库触发器获取父数据

在 Firebase 函数中为数据库触发器传递的数据是否计入传出带宽?

Firebase数据库触发器-在删除和更新时触发onCreate

不使用数据库触发器就无法使用Firebase云功能更新Firebase数据库

Swift Firebase 更新旧数据 - 实时数据库触发器

Firebase云功能数据库触发器有时无法正确运行

使用触发器向Firebase实时数据库添加元素

如何使用Admin SDK为数据库触发器设置Firebase FCM

Firebase数据库触发器-如何等待调用

Cloud Run 或 Kubernetes 上的 Firebase 实时数据库触发器,而不是 Cloud Functions

比较Firebase数据库的云函数触发器onCreate(),onWrite(),onUpdate(),何时使用?

如何在onCreate触发器上访问Firebase云功能数据库的值

Firebase Cloud Functions数据库触发器'onCreate不是函数'

实时数据库触发器和推送通知Firebase和iOS

我如何在firebase android中查询像云函数中的数据库触发器

如何从 Firebase Functions 将触发器放置到另一个 Firebase 数据库?

数据库多表触发器

SQL触发器数据库

如何使用带有实时数据库/分析触发器的Firebase Cloud功能调度程序?

模拟Firebase数据库触发器功能错误:尚不支持服务“ firebaseio.com”

Firebase数据库是否提供事件,触发器和存储过程等功能?

具有实时数据库触发器的 Firebase 云功能:如何更新源节点?