【问题标题】:Firebase iOS .queryOrderedByChild and .queryEqualTo not workingFirebase iOS .queryOrderedByChild 和 .queryEqualTo 不起作用
【发布时间】:2023-03-31 19:55:01
【问题描述】:

我正在尝试从具有类似结构的 Firebase 数据库中过滤结果。

chats
    chatId
        messages
            messageId
                userId: true

我需要两个查询,一个只返回包含现有子 userId 的消息(如果存在,它将始终为真),另一个只返回没有它的消息。

我正在尝试使用这两个引用并观察 .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 事件返回所有消息而不过滤。

【问题讨论】:

  • 您希望变量 let messagesWithUser = 包含什么?
  • 我用来观察 childAdded 事件的 FIRDatabaseReference。我希望它仅针对具有指定子项的消息触发。

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

发现问题。我使用 FIRDatabaseReference 而不是 FIRDatabaseQuery 来观察变化...

【讨论】:

    【解决方案2】:

    回复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)
            })
    }
    

    【讨论】:

      【解决方案3】:

      谢谢尼古拉。我需要在我的函数中实现以前的方法,但是 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])
          }
      

      【讨论】:

      • func blueRewardTransaction(purchaseValue: Double) { let newBalance = blueRewardBalance(completeBlock: (value) in { let userRef = FIRAuth.auth()?.currentUser?.uid let firebaseRef = FIRDatabase.database() .reference() firebaseRef.child("Reward/\ (userRef!)").updateChildValues(["rewardCardBalance": newBalance]) } }
      猜你喜欢
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多