Joh*_*oah 2 json nosql firebase firebase-realtime-database
我正在尝试使用Firebase创建一个数据库(json).我搜索了文档和网络,但找不到明确的方法开始.我想拥有一个用户数据库.每个用户(表示为UID)应该有一个昵称和一个朋友列表.
我尝试制作一个如下所示的.json文件:
{
users:{
}
}
Run Code Online (Sandbox Code Playgroud)
并将其添加到Firebase控制台以开始,但它不起作用.我该怎么做?
数据库应如下所示:
{
users:{
UID:{
nickname: hello
friends: UID2
}
UID2:{
nickname: world
friends: UID
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道我是否做得对,所以我非常感谢你们在这个问题上能给我的任何帮助.提前致谢!
似乎是一个好的起点.我会做两个改变.
使用Firebase数据库时的基本建议是保持数据结构浅/平.这有很多原因,你至少有两个.
使用您当前的数据结构,假设您要显示用户名列表.您只能通过收听来获取该列表/users.这意味着您不仅要获取每个用户的用户名,还要获取他们的朋友列表.您将向用户显示所有数据的机会很小,这意味着您只是浪费了一些带宽.
假设您希望允许每个人阅读用户名列表.但是您只希望每个用户都能够阅读他们自己的朋友列表.您当前的数据结构很难,因为权限级联和规则不是过滤器.
更好的结构是将用户配置文件列表(当前只是他们的名称)与每个用户的朋友列表分开.
您当前只拥有该friends属性的单个值.当您开始构建应用程序时,您将需要存储多个朋友.最常见的是然后存储一个数组或UIDS列表:
[ UID1, UID2, UID3 ]
Run Code Online (Sandbox Code Playgroud)
要么
{
"-K.......1": "UID1"
"-K.......5": "UID2"
"-K.......9": "UID3"
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这些数据结构的类型错误.数组和第二个集合都是列表:(可能)非唯一值的有序集合.但是,不需要订购朋友的集合,它必须是独一无二的.我要么在收藏中,要么我不在那里,我不能在那里多次,订单通常无关紧要.这就是为什么你经常最终寻找friends.contains("UID1")或ref.orderByValue().equalTo("UID1")操作上述模型.
更好的模型是将数据存储为一组.集合是无序值的集合,必须是唯一的.非常适合朋友聚会.要将其存储在Firebase中,我们使用UID作为集合的关键字.由于我们无法在没有值的情况下存储密钥,因此我们将其true用作虚拟值.
所以这导致了这个数据模型:
{
users:{
UID:{
nickname: hello
}
UID2:{
nickname: world
}
}
friends:{
UID:{
UID2: true
}
UID2:{
UID: true
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于一般的NoSQL数据建模和Firebase,还有更多的说法/了解.要了解这一点,我建议阅读NoSQL数据建模并观看Firebase for SQL开发人员.