【问题标题】:Querying Firebase Users to Check If Contact Exists in Database查询 Firebase 用户以检查数据库中是否存在联系人
【发布时间】:2017-08-31 09:28:51
【问题描述】:

我目前正在设置 Firebase 应用,并且能够检索使用该应用的所有用户的列表。当用户首次注册应用程序时,他们需要确认他们的电话号码,就像现在大多数 iOS 应用程序所做的那样。我将他们的电话号码存储在“用户”节点中。 我的问题是如何在 Firebase 中查询以检查该电话号码是否存在于我的数据库中?基本上我想查询我针对所有联系人列表生成的电话号码列表

这将允许我显示特定联系人当前是否正在使用该应用程序,它将显示在表格视图/集合视图中的联系人姓名下方。如果他们不是,那么他们可以通过短信/电子邮件收到加入该应用程序的邀请。

“用户”节点在我的 Firebase 数据库中显示如下:

    "users" : {
    "userId1" : {
        "name" : "Alex",
        "email" : "alex@gmail.com",
        "phoneNumber" : "123456789" 
    },  
    "userId2" : {
        "name" : "Ben",
        "email" : "ben@gmail.com",
        "phoneNumber" : "223456789" 

    },
    "userId3" : {
        "name" : "Charles",
        "email" : "charles@gmail.com",
        "phoneNumber" : "323456789" 

    }
}

我是在 nosql 数据库中查询的新手,希望能得到帮助。太感谢了!

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database nosql


    【解决方案1】:

    首先,从 firebase 获取值并检查它是否存在。下面是示例代码

       self.ref = FIRDatabase.database().reference()
        ref.child("users").child("userID").observeSingleEventOfType(.Value, withBlock: { (snapshot) in
    
            if snapshot.hasChild("phoneNumber"){
    
                print("Phone number exist")
    
            }else{
    
                print("Phone number doesn't exist")
            }
    
    
        })
    

    另一种方式: 直接走路径并检查存在

    FIRDatabase.database().reference().child("users").child("userID").child("phoneNumber").observeSingleEvent(of: .value, with: {(snap) in
    
            if snap.exists(){
    
                //Your user already has a Phone number
    
            }else{
               //Phone number not available
    
            }
        })
    

    【讨论】:

    • 但我将如何检查所有用户 ID 与仅一个用户 ID?
    • 将代码中的“userID”替换为您拥有的用户ID。该路径将指向该用户 ID
    【解决方案2】:

    尝试使用 Firebase 的排序功能。

    var userRef : FIRDatabaseQuery = FIRDatabase.database().reference().child("users")
    userRef = userRef.queryOrdered(byChild: "phoneNumber").queryEqual(toValue: <NUMBER>)
    userRef.observe(FIRDataEventType.value, with: { (snapshot) in
        if snapshot.value != nil {
            //value exists
        }
    }, withCancel: { (error) in
        //search error
    })
    

    更多关于排序的信息在这里:https://firebase.google.com/docs/database/ios/lists-of-data

    【讨论】:

    • 谢谢,我认为这很接近。但我会尽快发布我的解决方案,因为我认为它可能有助于理解 Firebase 中的数据结构
    猜你喜欢
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多