【问题标题】:Querying Child Nodes Based on a Particular Value (Swift 3, Firebase)根据特定值查询子节点(Swift 3、Firebase)
【发布时间】:2017-08-02 00:56:18
【问题描述】:

我正在尝试传递一个电话号码(例如 1111111111)并查看它是否与我的 Firebase 数据库中的任何条目匹配。我在整理数据库和查找电话号码时遇到问题。以下是 Firebase 数据库的 JSON 代码。

{
  "Users" : {
    "3SMHwMuA8HQm9yLoivxYoCtUccr1" : {
      "Email" : "firstname1.lastname1@gmail.com",
      "First Name" : "First Name 1",
      "Last Name" : "Last Name 1",
      "Phone Number" : "(111) 111-1111"
    },
    "NvQiGzASw2QDAMcBQLx1HNzR8ZM2" : {
      "Email" : "firstname2.lastname2@gmail.com",
      "First Name" : "First Name 2",
      "Last Name" : "First Name 2",
      "Phone Number" : "(222) 222-2222"
     },
    "RuVMfHUC8qQg8KGVJitEkzq9Tsy2" : {
      "Email" : "firstname3.lastname3@gmail.com",
      "First Name" : "First Name 3",
      "Last Name" : "Last Name 3",
      "Phone Number" : "(333) 333-3333"
    }
  }
}

这是我写的代码。它没有给出正确的结果。

phoneNumber: Int = 1111111111
ref = Database.database().reference()
let phoneNoInDatabase = ref.child("Users").queryEqual(toValue: phoneNo_pb_int)
let phoneNoInDatabaseInt = Int(phoneNoInDatabase.components(separatedBy: CharacterSet.decimalDigits.inverted).joined())
if phoneNoInDatabase_int == phoneNo_pb_int {
    // Success!
    print("User Found")
}
else {
    // Error!
    print("User not Found")
}

【问题讨论】:

    标签: ios firebase swift3 firebase-realtime-database


    【解决方案1】:

    您缺少关于过滤哪个孩子的说明:

    let phoneNoInDatabase = ref.child("Users").queryOrdered(byChild: "Phone Number").queryEqual(toValue: phoneNo_pb_int)
    

    【讨论】:

    • 恐怕您的解决方案不起作用。我添加了您的代码,行为仍然相同。感谢您的努力。
    • 您似乎将电话号码作为数字保留在代码中。在数据库中,您将其存储为字符串。因此,您需要将其转换为字符串:queryEqual(toValue: "1111111111")
    • 似乎并非如此,因为当从电话联系人列表中选择一个号码时,它总是匹配一个号码 - (333) 333-3333。此号码找到匹配项。而其他 2 个数字没有;即使它们在数据库中。