Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase数据库-具有嵌套用户节点的用户的建议数据库结构_Firebase_Firebase Realtime Database - Fatal编程技术网

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