2017-06-15 148 views
1

的火力点数据结构是加入在火力地堡数据库

{ 
    "eventAttendees" : { 
    "fm" : { 
     "1" : "David", 
     "2" : "Alice" 

    } 
    }, 
    "events" : { 
    "fm" : { 
     "date" : "2017-06-16", 
     "name" : "Firebase Meetup" 
    }, 
    "gm" : { 
     "date" : "2017-08-12", 
     "name" : "Meet Linh" 
    } 
    }, 
    "users" : { 
    "1" : { 
     "email" : "[email protected]", 
     "name" : "David" 
    }, 
    "2" : { 
     "email" : "[email protected]", 
     "name" : "Alice" 
    }, 
    "10" : { 
     "email" : "[email protected]", 
     "name" : "Khanh" 
    } 
    } 
} 

我想找个谁去调频事件的所有用户。这里是我的代码:

let ref = Database.database().reference() 
ref.child("eventAttendees/fm").observe(.value, with: { (snapshot) in 
      print (snapshot.key) 
      ref.child("users/\(snapshot.key)").observeSingleEvent(of: .value, with: { (userSnapshot) in 
       let content = userSnapshot.value as? [String : AnyObject] ?? [:] 
       print(content) 
      }) 
     }) 

我按照这个教程https://youtu.be/Idu9EJPSxiY?t=3m14s

底座上的教程snapshot.key应该返回 “1”, “2”,使ref.child("users/\(snapshot.key)")ref.child("users/1")

但在我代码,snapshot.key返回“fm”和ref.child("users/\(snapshot.key)")将是ref.child("users/fm")

我的代码中的问题在哪里?

回答

3

根据eventAttendees/fm你有多个孩子。因此,您需要循环代码中的这些子节点:

let ref = Database.database().reference() 
ref.child("eventAttendees/fm").observe(.value, with: { (snapshot) in 
    for child in snapshot.children.allObjects as [FIRDataSnapshot] { 
     print (child.key) 
     ref.child("users/\(child.key)").observeSingleEvent(of: .value, with: { (userSnapshot) in 
      let content = userSnapshot.value as? [String : AnyObject] ?? [:] 
      print(content["name"]) 
     }) 
    } 
}) 
+0

谢谢!奇怪的是,在视频教程中,作者不必循环。我错过了什么? – John

+1

在视频中,David使用on(“child_added”作为外部循环,为每个孩子启动一个单独的事件,使用'on(“value”',它为所有匹配的孩子启动一个事件,这意味着你需要在回调函数中循环。 –