我需要删除具有值“ -LKJ60LdhSaJOzogSccL”的媒体对象。为了删除它,我必须检索它先前使用childByAutoId函数生成的密钥。
如何按值查询媒体节点?我需要查询媒体节点以获取具有一定值的单个子代。
这就是我尝试过的方法,它返回null。
let mediaUID = "-LKJ60LdhSaJOzogSccL"
userUID = Q6Dm3IMLNLgBH3ny3rv2CMYf47p1
let refUsers = Database.database().reference().child(users).child(userUID).child("media")
refUsers.queryEqual(toValue: mediaUID).observeSingleEvent(of: .value, with: { (snapshot) in
print("snapshot.value \(snapshot.value)")
// prints null
return
})
users
Q6Dm3IMLNLgBH3ny3rv2CMYf47p1
email: "dondraper@gmail.com"
fcmToken: "d1I..."
media
-LKJ61KoaUUrEt1JtfoS: "-LKJ60LdhSaJOzogSccL"
答案 0 :(得分:1)
您缺少对子节点进行排序的说明,这意味着Firebase(默认情况下)对节点priority进行排序和过滤。解决方案是按值排序,然后过滤:
refUsers.queryOrderedByValue().queryEqual(toValue: mediaUID).observeSingleEvent(of: .value, with: { (snapshot) in
由于您对Firebase数据库执行了查询,因此可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也将包含一个结果的列表。您需要通过遍历结果在代码中进行处理:
for child in snapshot.children.allObjects as! [FIRDataSnapshot] {
print(child.value)
}