当从 Firebase 控制台更改数据时,如何在 Firebase 上执行多路径数据更新?

How to perform a multi-path data update on Firebase when data is changed from the Firebase Console?

我目前正在开发一个 iOS 应用程序,我正在使用 Firebase 为其提供支持。

由于我的应用程序还比较小,所以我经常使用数据库对数据进行手动修改。我的用户可以提交地点(我在地图上显示的地点),我手动检查条目以确保数据完整和正确。

我最近开始使用 GeoFire,因此不得不开始非规范化我的数据 每个地方的坐标(纬度和经度)。

因此,我的数据库中有 2 个位置的 坐标

  1. /places/place_key/...
  2. /geofire/place_key/...

我目前正在寻找一种方法来自动更新我的数据库的 /geofire 端当我更新纬度或经度时数据库 /places 端的一个地点 直接从 Firebase 控制台.

我正在寻找有关如何执行此操作的提示。 Firebase Functions 可以帮助我吗?

干杯,

埃德

如果以后有人正好找这个问题的答案,我关注了@J。 Doe 建议并使用 Firebase Cloud Functions

设置超级简单,步骤 here

这里是示例代码,让我在我的一个对象更新时更新我的​​数据库的几个端点。

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

const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);


exports.placeDataUpdated = functions.database.ref('/places/{placeId}').onUpdate(event => {

    const place = event.data.val();
    const key = event.params.placeId;

    console.log("Updated place data for key: ", key);

    var dataToUpdate = {};

    dataToUpdate["places_summary/"+key+"/city"] = place.city;
    dataToUpdate["places_summary/"+key+"/country"] = place.country;
    dataToUpdate["places_summary/"+key+"/latitude"] = place.latitude;
    dataToUpdate["places_summary/"+key+"/longitude"] = place.longitude;
    dataToUpdate["places_summary/"+key+"/name"] = place.name;
    dataToUpdate["places_summary/"+key+"/numReviews"] = place.numReviews;
    dataToUpdate["places_summary/"+key+"/placeScore"] = place.placeScore;
    dataToUpdate["places_summary/"+key+"/products"] = place.products;
    dataToUpdate["places_summary/"+key+"/visible"] = place.onMap;
    dataToUpdate["places_GeoFire/"+key+"/l/0"] = place.latitude;
    dataToUpdate["places_GeoFire/"+key+"/l/1"] = place.longitude;

    return event.data.ref.parent.parent.update(dataToUpdate);

});

超级方便,几乎没有时间设置。