在 Firebase 实时数据库中更改密钥
Change keys in Firebase Realtime Database
我有一个 Android/iOS 项目与 Firebase 的实时数据库连接。
对于每个用户,数据库以用户的邮箱为key保存一些信息。
由于 Firebase 不允许密钥有 .
,密钥被设置为没有 .
s 的电子邮件(例如,电子邮件为 [=39 的用户的密钥) =]@gmail.com 是 abc@gmailcom).
问题现在可能很清楚了...因为不同的用户可能拥有相同的密钥。
该项目要求密钥为电子邮件(UID
在这种情况下没有用)。所以,我想通过将 .
更改为 ,
.
来使用这些键
问题是已经有一些用户在使用该应用程序,我不希望他们丢失已经保存的信息。我知道它可以手动修复:
- 获取注册用户的邮箱列表
- 查找每个电子邮件属于哪个键
- 在需要的地方添加
,
。
有没有办法自动执行此操作?
无法重命名实时数据库中的现有节点。另一方面,实施您概述的三步过程应该相当简单。
- 阅读用户,
- 遍历它们。
- 将数据写入新位置。
- 从旧位置删除数据。
如果需要,您可以将第 3 步和第 4 步与单个多位置更新结合起来,就像 Jay 展示的那样 。将旧位置设置为 null
将删除它。
所以根据 Jay 的回答,每个用户都可以这样:
let usersRef = self.ref.child("user")
messagesRef.updateChildValues([
"email@with,com": { ... /* data of the user */ },
"email@withcom": null
])
我有一个 Android/iOS 项目与 Firebase 的实时数据库连接。
对于每个用户,数据库以用户的邮箱为key保存一些信息。
由于 Firebase 不允许密钥有 .
,密钥被设置为没有 .
s 的电子邮件(例如,电子邮件为 [=39 的用户的密钥) =]@gmail.com 是 abc@gmailcom).
问题现在可能很清楚了...因为不同的用户可能拥有相同的密钥。
该项目要求密钥为电子邮件(UID
在这种情况下没有用)。所以,我想通过将 .
更改为 ,
.
问题是已经有一些用户在使用该应用程序,我不希望他们丢失已经保存的信息。我知道它可以手动修复:
- 获取注册用户的邮箱列表
- 查找每个电子邮件属于哪个键
- 在需要的地方添加
,
。
有没有办法自动执行此操作?
无法重命名实时数据库中的现有节点。另一方面,实施您概述的三步过程应该相当简单。
- 阅读用户,
- 遍历它们。
- 将数据写入新位置。
- 从旧位置删除数据。
如果需要,您可以将第 3 步和第 4 步与单个多位置更新结合起来,就像 Jay 展示的那样 null
将删除它。
所以根据 Jay 的回答,每个用户都可以这样:
let usersRef = self.ref.child("user")
messagesRef.updateChildValues([
"email@with,com": { ... /* data of the user */ },
"email@withcom": null
])