use*_*869 2 hierarchical-data ios firebase swift firebase-realtime-database
我有一组分层数据,我想从Firebase检索信息.以下是我的数据的外观:
但是,我的问题是:在查看数据结构的方式时,当我想要获取name
或者object id
a时attendee
,我必须执行以下代码:
func getAttendees(child: NSString, completion: (result: Bool, name: String?, objectID: String?) -> Void){
var attendeesReference = self.eventsReference.childByAppendingPath((child as String) + "/attendees")
attendeesReference.observeEventType(FEventType.ChildAdded, withBlock: { (snapshot) -> Void in
//Get the name/object ID of the attendee one by one--inefficient?
let name = snapshot.value.objectForKey("name") as? String
let objectID = snapshot.value.objectForKey("objectID") as? String
if snapshot != nil {
println("Name: \(name) Object ID: \(objectID)")
completion(result: true, name: name, objectID: objectID)
}
}) { (error) -> Void in
println(error.description)
}
}
Run Code Online (Sandbox Code Playgroud)
现在,这将通过每个与会者的孩子逐个抓取名称和对象ID.函数完成后,我将每个值存储到字典中.执行此操作时,此函数被多次调用,并且可能非常慢,尤其是在多次往返数据库时.有没有更有效的方法来做到这一点?我试图寻找到FEeventType.Value
,但似乎与内返回所有attendees
的孩子,当我真正想要的是name
和objectID
每个attendee
存储成某种字典.任何帮助,将不胜感激.谢谢!
Fra*_*len 10
Firebase的一个重要规则是只在您想要检索所有数据时才嵌套数据.此规则的原因是Firebase始终返回完整节点.您无法部分检索该节点中的某些数据,也无法检索其他数据.
关于构建数据的Firebase指南说明了这一点:
因为我们可以嵌套深达32级的数据,所以很容易认为这应该是默认结构.但是,当我们在数据库中的某个位置获取数据时,我们还会检索其所有子节点.因此,在实践中,最好保持尽可能平坦,就像构建SQL表一样.
你应该真正阅读文档的整个部分,因为它包含一些非常好的例子.
在您的情况下,您需要修改数据结构以将事件参与者与事件元数据分开:
events
-JFSDFHdsf89498432
eventCreator: "Stephen"
eventCreatorId: 1764137
-JOeDFJHFDSHJ14312
eventCreator: "puf"
eventCreatorId: 892312
event_attendees
-JFSDFHdsf89498432
-JSAJKAS75478
name: "Johnny Appleseed"
-JSAJKAS75412
name: "use1871869"
-JOeDFJHFDSHJ14312
-JaAasdhj1382
name: "Frank van Puffelen"
-Jo1asd138921
name: "use1871869"
Run Code Online (Sandbox Code Playgroud)
这样,您可以检索事件元数据而无需检索与会者,反之亦然.
归档时间: |
|
查看次数: |
3233 次 |
最近记录: |