2017-07-17 36 views
0

我目前正在开发iOS应用程序,并且正在使用Firebase来支持它。如何在从Firebase控制台更改数据时在Firebase上执行多路径数据更新?

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

我最近开始使用GeoFire,因而不得不开始非规范化我的数据每个地方的坐标(LAT & LON)。

因此,我有坐标在

  1. 下,在我的数据库2个位置/地区/ place_key/ ...
  2. /geofire/place_key/ ...

我目前在寻找一种方式来自动更新/geofire方我的数据库当我更新直接从Firebase控制台直接访问数据库/places位置的经度或纬度。

我正在寻找如何做到这一点的提示。 Firebase功能可以帮助我吗?

干杯,

埃德

+1

是的,写入事件云功能可以为您做到这一点。您告诉我您手动审核以确保数据完整且正确。您应该添加Firebase实时数据库规则,以检查数据是否完整且格式正确。 –

+0

嘿@J。 Doe感谢您的评论。我现在需要手动验证数据的原因是因为我的用户不需要给我他们添加的位置的确切位置,所以有时我不会有坐标,并且必须自己找到它们并将它们添加到数据库中手动。因此,为什么我只需要更新一次而不是几次,因为我的数据库是非规范化的。 –

回答

0

如果有人碰巧寻找的答案,在未来的这个问题,我也跟着@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); 

}); 

这是超级方便,几乎没有时间安装。

相关问题