繁体   English   中英

Firebase数据库读取childByAutoId

[英]Firebase Database Read childByAutoId

我目前正在iOS的Firebase中学习绳索,所以对我的新手技能还不了解。

下面是我的数据库的屏幕截图:

gZ7dn2LMkiah是用户的自动编号
LDBTRFVS8dtzLDBTe4oXs是此用户的LDBTe4oXs的自动ID

在此处输入图片说明

如何读取节点gZ7dn2LMkiah的两个子节点?
由于下面的代码原因,只有在该节点下只有一个孩子而不是两个孩子的情况下才有可能

ref = Database.database().reference()
    let userId: String = (Auth.auth().currentUser?.uid)!

    databaseHandle = ref?.child("childId").child(userId).observe(.childAdded, with: { (snapshot) in


我尝试在child(userId)之后添加childByAutoId ,但未返回任何结果。

任何帮助,将不胜感激。 提前致谢。

Database.database().reference(withPath: 
 "childId").child(userId).observe(.childAdded)
   { (snapshot:DataSnapshot) in    
       // This will print all sub node  
      print(snapshot)
   }

首先,您的数据库似乎不正确。 在第一个节点中, nick and relationautoGeneratedKey内,而在第二个节点中, nick and relation在键外,因为当节点折叠时,两者都可见。 因此,这些值应位于autoGeneratedKey 请以正确的方式更改您的数据库结构。 见下面的截图:

在此处输入图片说明

这将是您的childs表,其中包含所有父母的所有孩子,您可以查询特定父母以获取其孩子。 参见下面的代码片段:

 ref.child("childs").queryOrdered(byChild: "parentId").queryEqual(toValue: "123").observeSingleEvent(of: DataEventType.value) { (snapshot) in
     if snapshot.exists() {
         print("exists")
         for child in snapshot.children {
             let data = child as! DataSnapshot
             print(data.key)
             print(data.value)
         }
     }
     else {
         print("doesn't exist")
     }
 }

输出:

-LDBus9Xas3oTccwPN4r
Optional({
    nick = Dave;
    parentId = 123;
    relation = Son;
})
-LDBus9_Uz_qe69e9CXK
Optional({
    nick = Susan;
    parentId = 123;
    relation = Daughter;
})

其中parentIdlet userId: String = (Auth.auth().currentUser?.uid)!

注意1: 我尝试在child(userId)之后添加childByAutoId ,但未返回任何结果。

是的,它将不起作用,因为childByAutoId生成一个新密钥,该密钥将永远与现有的数据库密钥不匹配,因此您将一无所获。

注意2: 何时使用.childAdded

.childAdded事件用于侦听节点引用的新条目而不获取数据。 要一次获取数据,我们应该使用.observeSingleEvent事件。

注意3:以下原因引起的,只有在该节点下只有一个孩子,而没有两个孩子的情况下,才有可能

没有不可能。 这仅仅是因为第二节点的nickrelation不在密钥之内。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM