如何从孩子的 Firebase 获取数据?

Posted

技术标签:

【中文标题】如何从孩子的 Firebase 获取数据?【英文标题】:How to get data from Firebase in a child? 【发布时间】:2017-03-03 22:06:48 【问题描述】:

我的数据结构是这样的:

通常应该有多个用户,所以我在频道 ID 中获得了更多地图。我想从该频道 ID 中的第一个人那里检索用户 ID。当使用指向我的频道 ID 的正确路径时,我尝试使用此方法检索用户 ID,首先遵循正常代码:

let firstChild = UInt(1)

     self.channelRef?.queryLimited(toFirst: firstChild).observeSingleEvent
(of: .value, with:  (snapshot) in
                            let value = snapshot.value as? NSDictionary

    )
    if let newCreator = snapshot.childSnapshot(forPath: "userID").value
                            
                                print(newCreator)
                            

    let newCreator = value?.["userID"] as! String

    let newCreator = value?["userID"] as? String ?? ""

    if snapshot.key == "userID"
                
                    let newCreator = snapshot.value as! String
                

没有任何效果,主要是输出为零。这是快照的打印,然后是值的打印:

Snap (-KeLAUXw5juT1xBISOLA) 
    "-KeLCHhN3FPZ-chOE9MF" =     
        PictureVersion = 2;
        readyToGo = 0;
        userID = SZlQ76RLCJQpFa0CDhrgFJoYzrs2;
        username = pietje;
    ;

Optional(
    "-KeLCHhN3FPZ-chOE9MF" =     
        PictureVersion = 2;
        readyToGo = 0;
        userID = SZlQ76RLCJQpFa0CDhrgFJoYzrs2;
        username = pietje;
    ;
)

如何获取用户ID?

编辑:似乎我得到的唯一“关键”是用户的随机 ID。我认为我需要从更深一层获取数据,但该怎么做呢?

【问题讨论】:

【参考方案1】:
let user = value.allValues.first! as! NSDictionary
let userID = user["userID"] as? String ?? ""

虽然当快照中没有用户时这会崩溃,但请确保为此编写检查。这样做可能会更好。

self.channelRef?.queryLimited(toFirst: firstChild).observeSingleEvent(of: .value, with:  snapshot in
    let enumerator = snapshot.children
    while let user = enumerator.nextObject() as? FIRDataSnapshot 
        guard let userValue = user.value as? NSDictionary else 
            return
        
        let userID = userValue["userID"] as? String ?? ""
    
)

【讨论】:

以上是关于如何从孩子的 Firebase 获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 uid Firebase 数据库中获取电子邮件地址?

如何从 Firebase android kotlin 获取所有具有特定价值的孩子?

如何在firebase数据库中获取所有孩子的数据?

从firebase数据库中获取添加的孩子,它冻结了用户界面

如何在Android Firebase实时数据库中按降序获取孩子[重复]

如何从 Firebase Realtime DB 读取孩子的值?