更新firebase中多个位置的字符串

时间:2017-08-14 22:13:21

标签: firebase firebase-realtime-database

我正在创建一个具有以下数据库结构的应用程序:

{
    "Locations": {
      "location1": {
        "name": "Nice location"
      }
    },

    "User_posts": {
      "user1": {
         "post1": {
         "location_name": "Nice location",
         "location_id": "location1",
         "description": "Wow!"
        },
         "post2": {
         "location_name": "Nice location",
         "location_id": "location1",
         "description": "Nice"
        }
    }
}

如果我必须更改location1名称,如何更改所有用户帖子的所有location_name?我必须先下载所有数据并更新它或有其他方法吗?

我认为在用户输入帖子时,仅使用location id获取每个位置的位置名称并不是一个好主意。

2 个答案:

答案 0 :(得分:1)

通过复制数据,您可以降低写入性能,从而提高读取性能/可伸缩性。这是NoSQL数据库和一般高度可扩展系统中的正常权衡。

如果您要更新所有帖子的location_name,您确实需要查询帖子并更新每个帖子。如果您需要定期执行此操作,请考虑为每个位置保留单独的查找列表,以查找其使用的帖子。这种反向索引是NoSQL数据库中另一种常见现象。

我在答案中介绍了更新重复数据的策略:How to write denormalized data in Firebase

来自关系/ SQL背景,这可能最初感到不舒服,因为它违背了我们已经教过的规范化规则。为了抵制这种感觉,我建议您阅读NoSQL data modeling,观看Firebase for SQL developers,一般只需阅读NoSQL data modeling questions

答案 1 :(得分:0)

您可以向location1添加一个属性,例如isLocationOf,它将存储所有用户ID 或者帖子ID /帖子名称。喜欢

react-native-router-flux -version

这里isLocationOf是Locations的一个属性,其值是一个对象。
现在如果locations1的名称被更改,那么你可以检索它的isLocationOf对象,遍历它,获取包含该位置的所有帖子id / name。然后使用post id更新所有具有此地址的条目 此外,无论何时添加新帖子,都必须将其帖子ID /名称添加到isLocation对象。