来自Firebase的复杂查询

我需要joinFirebase中的两张表。 现在,我得到了如下所示的数据结构。

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

但我想显示日志,只有login的用户,我如何实现这一目标? 现在,我只能得到关键,但我需要的数据,如持续时间和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 

要获得持续时间 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) }) } } }) 

只需向每个日志节点添加一个标识哪个用户拥有该标识的节点即可。 所以每个都会有持续时间,startDate和uid。

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

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

从那里,只需查询uid =login的uid就可以返回快照中需要的日志节点和子数据。