当从 Firebase 控制台更改数据时,如何在 Firebase 上执行多路径数据更新?
How to perform a multi-path data update on Firebase when data is changed from the Firebase Console?
我目前正在开发一个 iOS 应用程序,我正在使用 Firebase 为其提供支持。
由于我的应用程序还比较小,所以我经常使用数据库对数据进行手动修改。我的用户可以提交地点(我在地图上显示的地点),我手动检查条目以确保数据完整和正确。
我最近开始使用 GeoFire,因此不得不开始非规范化我的数据 每个地方的坐标(纬度和经度)。
因此,我的数据库中有 2 个位置的 坐标
- /places/place_key/...
- /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);
});
超级方便,几乎没有时间设置。
我目前正在开发一个 iOS 应用程序,我正在使用 Firebase 为其提供支持。
由于我的应用程序还比较小,所以我经常使用数据库对数据进行手动修改。我的用户可以提交地点(我在地图上显示的地点),我手动检查条目以确保数据完整和正确。
我最近开始使用 GeoFire,因此不得不开始非规范化我的数据 每个地方的坐标(纬度和经度)。
因此,我的数据库中有 2 个位置的 坐标
- /places/place_key/...
- /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);
});
超级方便,几乎没有时间设置。