【问题标题】:Best practices for updating current data Firebase database after adding some more denormalization添加更多非规范化后更新当前数据 Firebase 数据库的最佳实践
【发布时间】:2017-04-01 11:16:45
【问题描述】:

在我决定使用更多重复数据来支持一些复杂的查询或只是为了更容易读取数据之后,我想查看更新 Firebase 数据库中当前数据的最佳和推荐做法。例如,我的 Firebase 数据库中有用户列表,每个用户看起来像

users
 -KGvMIPwul2dUYABCDEF
   countryCode: 1
   id: -KGvMIPwul2dUYABCDEF
   mobileNumber: 1231231234 
   name: Varun Gupta

我一直在根据与当前数据配合使用的手机号码查询用户。现在,我还需要根据国家代码和手机号码的组合来查询用户。所以,我决定添加一些重复的数据,以使查询更容易,新用户看起来像

users
 -KGvMIPwul2dUYABCDEF
   countryCode: 1
   id: -KGvMIPwul2dUYABCDEF
   mobileNumber: 1231231234 
   name: Varun Gupta
   mobileNumberWithCC: 11231231234

我将为所有新用户提供mobileNumberWithCC,但我也想用此信息更新当前用户。我想询问在这种情况下更新数据库的最佳实践。我应该只使用管理 SDK 编写一些代码来更新所需的数据并运行一次,还是有任何其他建议的方法来做到这一点。

谢谢!

【问题讨论】:

  • 这是许多开发人员都面临的问题 - 随着您的应用程序的增长和新功能的添加,必须存储额外的数据。由于这是直接添加子节点,因此您的结论可能是最简单的:遍历所有用户,读入用户数据,连接字段并写出附加字段。不知道为什么有人会投票结束这个问题,因为它是基于意见的,但直接与问题中明确列出的特定编码问题相关。
  • 问题解决了吗?
  • @AlexM.我选择了 Jay 提出的建议,这是我发布问题时的想法。我只是想确保我没有忽略某些东西。

标签: firebase firebase-realtime-database


【解决方案1】:

创建一个这样的方法,您可以在其中一次更新数据:

private static void updateUser(String userId) {
    Map<String, Object> map = new HashMap<>();
    map.put("/users/" + userId + "/", new HashMap<>().put("mobileNumber", 1231231234));
    map.put("/users/" + userId + "/", new HashMap<>().put(mobileNumberWithCC, 11231231234));
    yourReference.updateChildren(map);
}

甚至更简单:

yourReference.child(users).child(userId).child(mobileNumber).setValue(1231231234); yourReference.child(users).child(userId).child(mobileNumberWithCC).setValue(11231231234);

【讨论】:

    猜你喜欢
    • 2011-10-31
    • 1970-01-01
    • 2018-04-03
    • 2011-09-24
    • 2011-10-15
    • 2010-10-11
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多