在Firebase数据库中查找对象

时间:2017-01-09 16:19:28

标签: ios swift firebase firebase-realtime-database

对不起,我是Firebase的新手。这是我的示例数据库。

{
  groups:{
    #groupid:{
      members:{
        #userid:
      }
      name:
    }
  }
}

enter image description here

我正在尝试查找用户的群组。当我使用组名搜索时,我能够获取数据:

let lRef = FIRDatabase.database().referenceWithPath("groups")
    lRef.queryOrderedByChild("name").queryEqualToValue("one").observeSingleEventOfType(.Value, withBlock: { snapshot in
        print("hello world \(snapshot.value)")
    })

但是当我在会员中搜索用户ID时,我无法获得。有人请帮我完成这件事。

1 个答案:

答案 0 :(得分:1)

这是嵌套数据的完美示例。

Google就此主题提供了一个很好的documentation。他们建议避免这种情况。

这是一个引用:

  

避免嵌套数据

     

由于Firebase实时数据库允许最多嵌套数据深度为32级,因此您可能会认为这应该是默认结构。但是,当您在数据库中的某个位置获取数据时,还会检索其所有子节点。此外,当您在数据库中的某个节点上授予某人读取或写入权限时,您还可以授予他们访问该节点下所有数据的权限。因此,在实践中,最好保持数据结构尽可能平坦。

您可能会在数据库中拥有另一个包含用户元数据的节点。用户节点应该有一个包含用户所在的所有组的子节点。这样您就可以轻松地查看用户所在的组。

如果我是正确的,这正是你想要实现的目标。

您的数据库应该/看起来像这样:

{
  groups: {
    #groupid01: {
      members: {
        #userid: true,
      }
      name: #groupname01
    },
    #groupid02: {
      members: {
      }
      name: #groupname02
    }
  },
  users: {
    #userid01: {
      groups: {
        #groupid01: true,
        #groupid02: true
      }
    },
    #userid02: {
      groups: {
      }
    },
    ...: {},
  }
}

希望这有帮助!