我工作的群聊应用程序,我遇到麻烦试图使一个特定的查询到火力地堡DB。充分利用节点特定的子值仅在用户的UID存在
我需要得到所有用户的个人资料照片在一间客房。但只有当前用户所属的房间。
private func observeRooms() {
let databaseRef = FIRDatabase.database().reference()
let groupRef = databaseRef.child("groups")
guard let uid = FIRAuth.auth()?.currentUser?.uid else {return}
let queryRef = groupRef.queryOrdered(byChild: "participants/\(uid)").queryEqual(toValue: nil)
queryRef.observe(.childAdded, with: { snapshot in
let roomDict = snapshot.value as! [String: AnyObject]
print("roomDict: \(roomDict)")
let id = snapshot.key
let avatar = roomDict["profilePicture"] as! String
})
}
显然设置queryEqual(toValue: nil)
返回所有房间的当前用户不是的一部分 - 的什么,我需要相反。我知道反过来会检查queryEqual(toValue: true)
,但: true
没有显示在数据库中。
这是我在火力地堡节点添加到“组”:
// Start group node for new room
let groupRef: FIRDatabaseReference = FIRDatabase.database().reference().child("groups")
let roomID = newRoomRef.key
let groupRoomRef = groupRef.child(roomID)
let groupDict = ["roomName" : roomName, "participants": [uid : true]] as [String : Any]
groupRoomRef.setValue(groupDict)
这是数据结构是如何结束:
"groups" : {
"-KkGzZ7frbnXmImt0JpV" : {
"participants" : {
"tzfHgGKWLEPzPU9GvkO4XE1QKy53" : {
"gender" : "male",
"handle" : "Testing",
"name" : "Test User",
"profilePicture" : "https://graph.facebook.com/*removed*/picture?type=large&return_ssl_resources=1",
"status" : "F8B016"
}
},
"roomName" : "Test Room"
},
我怎样才能正确地为profilePicture
值一个房间中的所有用户,仅针对当前用户的UID是参与者的组?
很好的回答,谢谢,我会尝试这些建议。我在Firebase中有3个“父”节点:1.用户(主要用于通过句柄搜索用户)2.房间(保存每个房间的消息)和3.组(与房间相同,除了参与者数据并减去消息) 。我想知道,我确实使用'“参与者”设置组节点:[uid:true]'...为什么它没有在Firebase中显示出这种方式?我以相同的方式设置房间节点,并在那里显示':true'。唯一不同的是房间节点不包含任何用户数据。 – KingTim
我不得不看到更多的代码来给出明确的答案,但是从您的示例看来,您必须在某个时刻用用户配置文件数据覆盖最初的“true”值。节点不能同时存储值_and_子项。这听起来像是一个单独的问题。 –