我正在设计Firebase数据库,以便将Firestore中的某些文档字段链接到实时数据库字段;这样,如果实时数据库发生更改,它将更改相应的firestore字段。
让我给我的问题更多背景信息。.
我正在设计一个具有错误报告聊天室的移动应用程序。用户可以从这些聊天室中写入错误,并将错误输入实时数据库以及更新Firestore。
在管理员方面,他应该能够读取所有错误。
我还没有真正深入研究Cloud Functions,所以我想知道是否可以通过这种方式将两者链接起来。
以下是firestore集合的结构:
答案 0 :(得分:3)
使用Firebase Admin SDK,您可以很好地在Cloud Function中将一个Firebase数据库服务写入另一个数据库服务,即从Realtime Database写入Cloud Firestore,反之亦然。
您在问题中写道:“(如果)实时数据库中发生更改,它将更改相应的Firestore字段。”。
这是一个简单的代码示例,显示了在实时数据库中发生更改时如何写入特定的Firestore文档。我们假设您写入实时数据库中的city/radio
节点,并且要在Firestore中更新相应的radio
文档。
由您决定要根据具体情况进行调整,特别是调整触发Cloud Function以及要更新的Firestore文档和字段的路径。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.updateFirestore = functions.database.ref('cities/{cityId}/{radioId}')
.onWrite((change, context) => {
const city = context.params.cityId;
const radio = context.params.radioId;
// Exit when the data is deleted -> to confirm that this is needed in your case....
if (!change.after.exists()) {
return null;
}
// Grab the current value of what was written to the Realtime Database.
const data = change.after.val();
//Write to Firestore: here we use the TransmitterError field as an example
const firestoreDb = admin.firestore();
const docReference = firestoreDb.collection(city).doc(radio);
return docReference.set(
{
TransmitterError: data.TransmitterError
},
{ merge: true }
);
});
由于您“还没有真正深入研究Cloud Functions”,因此建议您观看Firebase视频系列中有关“ JavaScript Promises”的3个视频:https://firebase.google.com/docs/functions/video-series/
深入documentation也是必须的!