Firebase数据库-具有嵌套用户节点的用户的建议数据库结构
我想知道如何完成数据库的结构。我正在创建简单的配对应用程序,我想创建一对多的关系Firebase数据库-具有嵌套用户节点的用户的建议数据库结构,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,我想知道如何完成数据库的结构。我正在创建简单的配对应用程序,我想创建一对多的关系 matches 8aWcF6GQmpezfJkVnW5uYoJ2wtI3 //id for user 8oqmrMVZ57XXlunIAUEeBgKFZ0h2 //id of matched users NzDaJNamKNVsWuP0FVaJI7b6Cuk1 XzGWMuXrFYQ6m0MMVSwvpjSV4JF2 users 8aWcF6GQmpezfJkVnW
matches
8aWcF6GQmpezfJkVnW5uYoJ2wtI3 //id for user
8oqmrMVZ57XXlunIAUEeBgKFZ0h2 //id of matched users
NzDaJNamKNVsWuP0FVaJI7b6Cuk1
XzGWMuXrFYQ6m0MMVSwvpjSV4JF2
users
8aWcF6GQmpezfJkVnW5uYoJ2wtI3
email: "test@mail.com"
uid: "8aWcF6GQmpezfJkVnW5uYoJ2wtI3"
username: "john"
NzDaJNamKNVsWuP0FVaJI7b6Cuk1
email: "test2@mail.com"
uid: "NzDaJNamKNVsWuP0FVaJI7b6Cuk1"
username: "john2"
XzGWMuXrFYQ6m0MMVSwvpjSV4JF2
email: "aaaaa@mail.ru"
uid: "8oqmrMVZ57XXlunIAUEeBgKFZ0h2"
username: "aaaaa"
但是,如果没有值,我无法实现子节点到节点。因此,在Firebase控制台中不可能创建上述结构
你能给我一些建议吗?Firebase确实不能存储没有值的密钥。所以你有两个选择: 编一把钥匙 作价 让我们先讨论一下错误的解决方案:编一把钥匙 许多开发人员选择选项1:编写自己的密钥。这通常会导致它们使用数组:
matches
8aWcF6GQmpezfJkVnW5uYoJ2wtI3 //id for user
[ "8oqmrMVZ57XXlunIAUEeBgKFZ0h2", "NzDaJNamKNVsWuP0FVaJI7b6Cuk1", "XzGWMuXrFYQ6m0MMVSwvpjSV4JF2" ]
这似乎非常简洁,但却是错误的解决方案。数组是可以多次包含相同值的有序集合。在您的数据中,每个用户只能出现一次。这意味着我们每次要添加用户时都必须执行array.contains
一个更好的解决方案是构造一个值。我们在这里使用什么值并不重要,因此惯用的值是正确的:
现在数据结构的键中仍然有用户ID,这也意味着每个用户ID只能在集合中出现一次。这本质上是一个的Firebase数据库实现
注意,这里的真值不是神奇的值。因此,如果您发现需要为每个用户保留一些数据,您可以轻松地存储这些数据,而不是真正的数据
例如,如果你想显示所有朋友的名字,你可以考虑存储他们的名字而不是真的。这样你就不用为每个用户查找了。当然,这意味着你必须弄清楚如果用户更改了他们的名字,你想做什么。有关此问题的更多信息,请参见此答案:
matches
8aWcF6GQmpezfJkVnW5uYoJ2wtI3 //id for user
8oqmrMVZ57XXlunIAUEeBgKFZ0h2: true
NzDaJNamKNVsWuP0FVaJI7b6Cuk1: true
XzGWMuXrFYQ6m0MMVSwvpjSV4JF2: true