根据特定值查询子节点(Swift 3、Firebase)

Posted

技术标签:

【中文标题】根据特定值查询子节点(Swift 3、Firebase)【英文标题】:Querying Child Nodes Based on a Particular Value (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")

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

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

以上是关于根据特定值查询子节点(Swift 3、Firebase)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 在 Firebase 中使用 equalTo 查询查找子节点? [复制]

无法使用 swift 3 在 firebase 中节点特定值

如何从特定的 UICollectionViewCell 中删除 firebase 子节点 - Swift

Firebase:查询以根据条件排除数据

如何使用 Swift 从 UITableViewCell 中删除 Firebase 中的特定子节点

在树型结构中如何从数据库中查询并显示子节点!