如何使用 onDisconnectUpdateChildValues 在 firebase 上更新数组
How to update an array on firebase using the onDisconnectUpdateChildValues
我想在用户断开连接后从一组用户中删除该用户(实时 firebase)。
例如:John 崩溃了,所以删除 johns 节点并重新排序索引。请检查图像。
let connectedRef = Database.database().reference(withPath: ".info/connected")
connectedRef.observe(.value, with: { snapshot in
guard let connected = snapshot.value as? Bool, connected else {
completion(false)
return
}
self.database.child("\(groupChatId)_F/users").onDisconnectUpdateChildValues([ ??? ]){ (error, ref) in
if let error = error {
print("\(error)")
}
completion(true)
}
})
我不确定是否有可能做这样的事情。如果我的直觉是正确的,那么请提供有关如何解决问题的建议。
首先:像您在此处使用的数组这样的数组是 Firebase 中的一种反模式。我强烈推荐阅读 Best Practices: Arrays in Firebase.
但除此之外:要在断开连接时更新,您需要指定两件事:
- 您要写入的确切、完整的路径。
- 您要写入该路径的确切值。
假设您要删除 users/2
处的 value/path 我建议使用:
self.database.child("\(groupChatId)_F/users/2").onDisconnectRemoveValue(){ (error, ref) in
...
这确实意味着您需要知道用户的路径(此示例代码中的2
)。如果您目前不知道该路径,您有两个主要选择:
要么在创建子节点时在代码中记住它。所以当你添加"Bob"
的时候,记得在你的代码中,你在节点2
.
中添加了他
或者您可以使路径幂等。例如,如果您的用户名是唯一的,我建议将它们存储在这样的结构中:
"users": {
"Alex": true,
"Bob": true,
"John": true
}
我想在用户断开连接后从一组用户中删除该用户(实时 firebase)。
例如:John 崩溃了,所以删除 johns 节点并重新排序索引。请检查图像。
let connectedRef = Database.database().reference(withPath: ".info/connected")
connectedRef.observe(.value, with: { snapshot in
guard let connected = snapshot.value as? Bool, connected else {
completion(false)
return
}
self.database.child("\(groupChatId)_F/users").onDisconnectUpdateChildValues([ ??? ]){ (error, ref) in
if let error = error {
print("\(error)")
}
completion(true)
}
})
我不确定是否有可能做这样的事情。如果我的直觉是正确的,那么请提供有关如何解决问题的建议。
首先:像您在此处使用的数组这样的数组是 Firebase 中的一种反模式。我强烈推荐阅读 Best Practices: Arrays in Firebase.
但除此之外:要在断开连接时更新,您需要指定两件事:
- 您要写入的确切、完整的路径。
- 您要写入该路径的确切值。
假设您要删除 users/2
处的 value/path 我建议使用:
self.database.child("\(groupChatId)_F/users/2").onDisconnectRemoveValue(){ (error, ref) in
...
这确实意味着您需要知道用户的路径(此示例代码中的2
)。如果您目前不知道该路径,您有两个主要选择:
要么在创建子节点时在代码中记住它。所以当你添加
中添加了他"Bob"
的时候,记得在你的代码中,你在节点2
.或者您可以使路径幂等。例如,如果您的用户名是唯一的,我建议将它们存储在这样的结构中:
"users": { "Alex": true, "Bob": true, "John": true }