来自Firebase的复杂查询

时间:2016-10-31 17:00:56

标签: ios swift firebase firebase-realtime-database

我需要从Firebase加入我的两张桌子。 现在,我得到了如下所示的数据结构。

当用户创建日志时,它会从Firebase获取唯一ID。此ID保存在创建它的用户(test2@test.dk)下。

但我想显示日志,仅向登录的用户显示,我该如何实现?现在,我只能获得密钥,但我需要持续时间和startDate等数据。

logs
  -KVMbJKN1i2vAxzutiYq
    duration: 14
    startDate: 28/10/2016

  -KVMbLL4i_9dwaRZ9REB
    duration: 28
    startDate: 01/09/2016

  -KVMiLwoSY34TZpf8mST
    duration: 14
    startDate: 2/2/2016

users
  Edl7nDpJWIdNmDVUDn87p31d9mN2
    email: test@test.dk
    firstName: test
    imageUrl: URL
    lastName: test
    provider: Facebook

  KX6DRd0k5fasEaqB8vJWiXkp69L2
    email: test1@test.dk
    firstName: test1
    imageUrl: URL
    lastName: test1
    provider: Firebase

  WRgxyjSpQlUPmeJwfF9I7PhpvHs1
    email: test2@test.dk
    firstName: test2
    imageUrl: URL
    lastName: test2
    logs
      -KVMbJKN1i2vAxzutiYq: true
      -KVMbLL4i_9dwaRZ9REB: true
      -KVMiLwoSY34TZpf8mST: true
     provider: Firebase

2 个答案:

答案 0 :(得分:1)

要获得持续时间 startDate ,只需将其查询到特定节点的所需位置: -

FIRDatabase.database().reference().child("user/\(FIRAuth.auth()!.currentUser!.uid)/logs").observeSingleEvent(of: .value, with: {(userSnap) in 

 if let SnapDict = userSnap.value as? [String:AnyObject]{

 for each in SnapDict{ 

  FIRDatabase.database().reference().child("logs/\(each.key)").observeSingleEvent(of: .value , with : {(Snap) in 

     print(Snap.value)   

   })
  }
  }
})

答案 1 :(得分:0)

只需向每个日志节点添加一个子节点,以识别哪个用户拥有它。所以每个都有持续时间,startDate和uid。

logs
  -KVMbJKN1i2vAxzutiYq
    duration: 14
    startDate: 28/10/2016
    uid: WRgxyjSpQlUPmeJwfF9I7PhpvHs1

这样,日志节点指向拥有它的用户,而users / logs节点标识该用户的日志。

从那里,只需查询日志,其中uid =登录的uid将返回快照中所需的日志节点和子数据。