在 Firebase 实时数据库中更改密钥

Change keys in Firebase Realtime Database

我有一个 Android/iOS 项目与 Firebase 的实时数据库连接。

对于每个用户,数据库以用户的邮箱为key保存一些信息。

由于 Firebase 不允许密钥有 .,密钥被设置为没有 .s 的电子邮件(例如,电子邮件为 [=39 的用户的密钥) =]@gmail.com 是 abc@gmailcom).

问题现在可能很清楚了...因为不同的用户可能拥有相同的密钥。

该项目要求密钥为电子邮件(UID 在这种情况下没有用)。所以,我想通过将 . 更改为 ,.

来使用这些键

问题是已经有一些用户在使用该应用程序,我不希望他们丢失已经保存的信息。我知道它可以手动修复:

有没有办法自动执行此操作?

无法重命名实时数据库中的现有节点。另一方面,实施您概述的三步过程应该相当简单。

  1. 阅读用户,
  2. 遍历它们。
  3. 将数据写入新位置。
  4. 从旧位置删除数据。

如果需要,您可以将第 3 步和第 4 步与单个多位置更新结合起来,就像 Jay 展示的那样 。将旧位置设置为 null 将删除它。

所以根据 Jay 的回答,每个用户都可以这样:

let usersRef = self.ref.child("user")

messagesRef.updateChildValues([
  "email@with,com": { ... /* data of the user */ },
  "email@withcom": null
])