我尝试使用类似此结构的Firebase数据库过滤结果。
chats
chatId
messages
messageId
userId: true
我需要两个查询,一个只返回包含现有子 userId 的消息(如果它存在则始终为true),另一个只返回没有它的消息。
我尝试使用这两个引用并观察.childAdded事件:
let messagesWithUser = FIRDatabase.database().reference(withPath: "chats").child(chat.id).child("messages").queryOrdered(byChild: userId).queryEqual(toValue: true).ref
let messagesWithoutUser = FIRDatabase.database().reference(withPath: "chats").child(chat.id).child("messages").queryOrdered(byChild: userId).queryEqual(toValue: NSNull()).ref
目前.childAdded事件返回所有消息而不进行过滤。
答案 0 :(得分:3)
回应Dmitriy:
func blueRewardBalance(completeBlock: (value: Double) -> Void) {
let userRef = FIRAuth.auth()?.currentUser?.uid
var rewardBalance : Double! = 0.00
let purchaseRef = FIRDatabase.database().reference(withPath: "Reward/\(userRef!)")
purchaseRef.queryOrdered(byChild: "abc").observe(.value, with: { snapshot in
let dataSnapshot = snapshot.value as! [String: AnyObject]
rewardBalance = dataSnapshot["rewardCardBalance"] as! Double!
completeBlock(rewardBalance)
})
}
答案 1 :(得分:0)
发现问题所在。我使用FIRDatabaseReference而不是FIRDatabaseQuery来观察变化......
答案 2 :(得分:0)
谢谢Nicola。我需要在我的函数中实现先前的方法,但是blueRewardBalance请求参数。
func blueRewardTransaction(purchaseValue: Double) {
let newBalance = blueRewardBalance(completeBlock: //what I need paste here?) - purchaseValue
let userRef = FIRAuth.auth()?.currentUser?.uid
let firebaseRef = FIRDatabase.database().reference()
firebaseRef.child("Reward/\(userRef!)").updateChildValues(["rewardCardBalance": newBalance])
}