我想编写一个函数来从Firebase中删除整个孩子.我正在使用XCode 10和swift 3+.
我有我要删除的孩子的所有用户信息,所以我假设最好的调用是迭代每个孩子并测试匹配的子子值,但如果有更快的方法会很好.谢谢您的帮助!
继承人我要删除的内容
我假设测试纪元时间然后删除整个节点将是理想的.也不知道该怎么做
我知道您无权访问要删除的节点的密钥.是对的吗?为什么不?如果在FIRDatabaseQuery对象上使用"observe()"函数,则每个返回的对象都应带有键和值.
如Firebase官方指南中所述,使用密钥可以轻松删除节点.
从链接指南,
删除数据
删除数据的最简单方法是在对该数据位置的引用上调用removeValue.
您也可以通过将nil指定为另一个写操作(例如setValue或updateChildValues)的值来删除.您可以将此技术与updateChildValues一起使用,以在单个API调用中删除多个子项.
所以,你可以尝试:
FirebaseDatabase.Database.database().reference(withPath: "Forum").child(key).removeValue()
Run Code Online (Sandbox Code Playgroud)
要么
FirebaseDatabase.Database.database().reference(withPath: "Forum").child(key).setValue(nil)
Run Code Online (Sandbox Code Playgroud)
如果你无法以任何方式得到密钥,你所说的"迭代"通过节点的子节点可以通过使用查询来完成.这是一些示例代码,假设您想要Jonahelbaz的所有论坛帖子:
return FirebaseDatabase.Database.database().reference(withPath: "Forum").queryOrdered(byChild: "username").queryEqual(toValue: "Jonahelbaz").observe(.value, with: { (snapshot) in
if let forumPosts = snapshot.value as? [String: [String: AnyObject]] {
for (key, _) in forumPosts {
FirebaseDatabase.Database.database().reference(withPath: "Forum").child(key).removeValue()
}
}
})
Run Code Online (Sandbox Code Playgroud)
在这里,您使用作为参考"用户名"创建排序查询,然后您只询问"用户名"等于Johanelbaz的论坛帖子.您知道返回的快照是一个数组,所以现在您遍历数组并使用键来删除节点.
这种删除方式不是很好,因为您可能会获得具有相同用户名的多个帖子并将其全部删除.理想的情况是获取您要删除的论坛帖子的确切键.
| 归档时间: |
|
| 查看次数: |
3217 次 |
| 最近记录: |