如何按值查询firebase?

时间:2018-08-19 22:07:21

标签: swift firebase-realtime-database

我需要删除具有值“ -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"

1 个答案:

答案 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)     
}