gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:08:52 25 4
gpt4 key购买 nike

我正在编写一个 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

最佳答案

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在您的云功能中,您需要从 Admin SDK 获取它,如下所示:

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

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

关于javascript - Firebase 数据库触发器 - 从快照获取数据库对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57460018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com