在 firebase 中更改密钥的最佳方法是什么?

What is the best way to change a key in firebase?

如果我有这样的 firebase 数据:

teams:{
    thunder: {
        wins: 3,
        losses: 2,
        draw: 1
    },
    warrior: {
        wins: 2,
        losses: 4
    }
}

如何将 "warrior" 键更改为 "Warriors"?我能想到的唯一方法是加载 "warrior" 数据,用新密钥保存,然后删除旧数据。不过,这对我来说有点像 hack,有更好的方法吗?

改用数组并将团队推送到此数组。然后你的结构是这样的:

teams: [
  {
    name: "thunder",
    wins: 3,
    draws: 2,
    loss: 1
  }
]

那么您可以直接更新名称密钥,而无需先下载数据进行更新。

创建新节点并清除旧节点是正确的。但今后采用不同的结构将完全避免该问题。

任何类型的数据库编程的底线(对我们而言):永远不要将键直接绑定到数据。始终使用某种 'random' 或其他键结构来引用您的数据。

Firebase 在 childByAutoId 中为此提供了一个完美的工具,它创建了一个 'random' 子节点名称键。

Chrillewoodz 的回答就是答案...并进一步说明

teams
  randomKey_0:
    team_name: "thunder"
    wins: 3
    draws: 2
    loss: 1
 randomKey_1:
    team_name: "warrior"
    wins: 3
    draws: 2
    loss: 1
 randomKey_2:
    team_name: "super dudettes"
    wins: 100
    draws: 0
    loss: 0

randomKey_x 是 firebase 生成的 childByAutoId 节点名称。

使用此结构,您可以在不更改结构的情况下即时更改团队名称、胜利等。因为您现在有了参考,所以您可以在其他节点中使用它来参考该团队。例如,您可以有一个单独的节点来保存有关团队成员的信息

team_members:
  randomMemberKey_0
     team_member_name: "Scott"
     height: "7.5"
     belongs_to_team: "randomKey_0"
  randomMemberKey_1
     team_member_name: "Billy"
     height: "6.5"
     belongs_to_team: "randomKey_0"
  randomMemberKey_2
     team_member_name: "Frank"
     height: "5.0"
     belongs_to_team: "randomKey_1"

使用此结构,您可以查询有关团队本身的信息或其他查询以搜索任何团队成员或有关他们的信息。