我目前正在开发一款 iOS 应用,并使用 Firebase 为其提供支持。
由于我的应用程序仍然相对较小,因此我经常使用数据库对数据执行手动修改。我的用户可以提交地点(我在 map 上显示的地点),我会手动检查条目以确保数据完整且正确。
我最近开始使用 GeoFire,因此必须开始对我的数据进行非规范化以获得每个地点的坐标(纬度和经度)。
因此,我的数据库中有两个位置的坐标
- 在/places/place_key/...
- 在/geofire/place_key/...
我目前正在寻找一种方法,当我更新/places 端某个地点的纬度或经度时自动更新数据库的/geofire 端直接从 Firebase 控制台访问数据库。
我正在寻找有关如何做到这一点的提示。 Firebase Functions 可以帮我解决这个问题吗?
干杯,
编辑
最佳答案
如果将来有人碰巧寻找这个问题的答案,我会关注@J。美国能源部建议和使用Firebase Cloud Functions 。
设置 super 简单,步骤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 控制台更改数据时,如何在 Firebase 上执行多路径数据更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45151691/