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

标签 ios swift firebase firebase-realtime-database denormalization

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

由于我的应用程序仍然相对较小,因此我经常使用数据库对数据执行手动修改。我的用户可以提交地点(我在 map 上显示的地点),我会手动检查条目以确保数据完整且正确。

我最近开始使用 GeoFire,因此必须开始对我的数据进行非规范化以获得每个地点的坐标(纬度和经度)。

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

  1. /places/place_key/...
  2. /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/

相关文章:

ios - 如何根据 tableview 的 contentOffset 显示/隐藏自定义 View ?

ios - 向下滚动时,无法再通过 [cell.contentView viewWithTag] 访问 UITableViewCell 元素

ios - 在 App Store 更新应用程序

ios - 如何检查地理定位是否开启?

ios - SwiftUI:仅当 ScrollView 超过屏幕高度时才可滚动

swift - 一次只检索 5 个用户 :Firebase [like Instagram]

android - 如何检测另一个应用程序何时使用我的网络服务?

ios - "Connection interrupted"iOS 9 上的通信错误

ios - 退出 'while' 循环后数组项被删除?

javascript - 表的 Firebase child_changed