有没有一种使用Cloud函数将Cloud Firestore连接到实时数据库的方法?

时间:2019-11-16 07:12:19

标签: typescript firebase firebase-realtime-database google-cloud-firestore google-cloud-functions

我正在设计Firebase数据库,以便将Firestore中的某些文档字段链接到实时数据库字段;这样,如果实时数据库发生更改,它将更改相应的firestore字段。

让我给我的问题更多背景信息。.
我正在设计一个具有错误报告聊天室的移动应用程序。用户可以从这些聊天室中写入错误,并将错误输入实时数据库以及更新Firestore。
在管理员方面,他应该能够读取所有错误。
我还没有真正深入研究Cloud Functions,所以我想知道是否可以通过这种方式将两者链接起来。
以下是firestore集合的结构: firestore

1 个答案:

答案 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也是必须的!