[英]Firebase Database Read childByAutoId
我目前正在iOS的Firebase中学习绳索,所以对我的新手技能还不了解。
下面是我的数据库的屏幕截图:
gZ7dn2LMkiah
是用户的自动编号
LDBTRFVS8dtz
和LDBTe4oXs
是此用户的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 relation
在autoGeneratedKey
内,而在第二个节点中, 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;
})
其中parentId
为let userId: String = (Auth.auth().currentUser?.uid)!
。
注意1: 我尝试在child(userId)
之后添加childByAutoId
,但未返回任何结果。
是的,它将不起作用,因为childByAutoId
生成一个新密钥,该密钥将永远与现有的数据库密钥不匹配,因此您将一无所获。
注意2: 何时使用.childAdded
.childAdded
事件用于侦听节点引用的新条目而不获取数据。 要一次获取数据,我们应该使用.observeSingleEvent
事件。
注意3:以下原因引起的,只有在该节点下只有一个孩子,而没有两个孩子的情况下,才有可能
没有不可能。 这仅仅是因为第二节点的nick
和relation
不在密钥之内。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.