【问题标题】:User Titles in Firebase Realtime DatabaseFirebase 实时数据库中的用户头衔
【发布时间】:2021-12-14 22:32:31
【问题描述】:

所以我将(示例)用户的 JSON 文件导入实时数据库,并注意到一个小问题。

添加后,每个用户都会按照他们在 JSON 文件中的数字顺序进行排序。由于它从用户 4 开始,因此它的值为 1。如下所示:

.

User Json 的格式如下:

{
    "instagram": "null",
    "invited_by_user_profile": "null",
    "name": "Rohan Seth",
    "num_followers": 4187268,
    "num_following": 599,
    "photo_url": "https://clubhouseprod.s3.amazonaws.com:443/4_b471abef-7c14-43af-999a-6ecd1dd1709c",
    "time_created": "2020-03-17T07:51:28.085566+00:00",
    "twitter": "rohanseth",
    "user_id": 4,
    "username": "rohan"
}

是否有一些简单的方法可以让 Firebase 中的标题是每个用户的用户 ID,而不是当前使用的数字?

【问题讨论】:

    标签: json firebase firebase-realtime-database


    【解决方案1】:

    当您将 JSON 导入 Firebase 实时数据库时,它会使用 JSON 中存在的任何键。导入期间不支持重新映射密钥。

    当然你可以用一些代码来做到这一点:

    • 例如,您可以在导入 JSON 之前对其进行更改,以获得所需的密钥。
    • 您可以在一个小脚本中读取 JSON,然后通过其 API 将数据插入 Firebase。

    我建议不要使用连续的数字 ID 作为键。要了解原因,请查看这篇博文:Best Practices: Arrays in Firebase..

    【讨论】:

    • 要在 Frank 的回答中添加一个从准备上传的数组中提取 ID 的示例,您可以使用 JavaScript 仅使用 arrayOfUserData.reduce((acc, userData) => (acc[userData.uid] = userData, acc), {}) 来实现它(但是对于 90k 条目,JS 可能会窒息这个策略)。
    • 类似地,要将推送 ID 分配给您的数据结构,您可以使用 RTDB 推送密钥生成器:const rootRef = ref(getDatabase()); const getId = () => push(rootRef).key;。但是,由于 RTDB 推送 ID 基于您的系统时钟,您可以使用 Firestore 的 ID 生成器来代替使用const colRef = collection(getFirestore(), "404"); const getId = () => doc(colRef).id; 来获得更多随机性。两者都可以使用arrayOfUserData.reduce((acc, userData) => (acc[getId()] = userData, acc), {})
    猜你喜欢
    • 2019-10-09
    • 2020-01-17
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多