如何使用swift检查Firebase数据库节点值是否为true?

时间:2018-07-04 06:03:12

标签: swift firebase firebase-realtime-database

我具有以下Firebase数据库结构(请参见图片),该结构是在用户将compliment发送给另一个用户时创建的。

  1. 称赞以自动生成的ID保存在compliments
  2. compliment.key也保存在users-compliments下的senderID / receiverID /下,然后保存“ complimentID”:“ boolean”对,以指示其是否“活动”

我希望在允许将另一个发送给同一用户之前检查是否存在“主动”称赞。

但是,即使存在一个值为null的子节点,以下查询也会产生1输出。

我在这里做什么错了?

查询:

REF_USERS_COMPLIMENTS.child(currentUid).child(forId).queryEqual(toValue: "1").observeSingleEvent(of: .value) { (snapshot) in
        print("snap: \(snapshot.value)")
    }

控制台输出:

snap: Optional(<null>)

enter image description here

2 个答案:

答案 0 :(得分:1)

使用queryEqual()时,必须将其与queryOrderedBy结合使用。在您的情况下,它将是queryOrderedByValue(),因为您要比较值:

REF_USERS_COMPLIMENTS.child(currentUid).child(forId).queryOrderedByValue().queryEqual(toValue: "1").observeSingleEvent(of: .value) { (snapshot) in
    print("snap: \(snapshot.value)")
}

有关更多信息,请参见the docs

答案 1 :(得分:0)

尝试一下:

REF_USERS_COMPLIMENTS.child(currentUid).child(forId).observeSingleEvent(of: .value) { (snapshot) in
       print("snap: \(snapshot.value)")
       if let _ = snapshot.value as? NSNull {
         // do your thing
       }
 }