【问题标题】:Firebase, get immediate parent of a child with specific valueFirebase,获得具有特定价值的孩子的直接父母
【发布时间】:2018-01-31 19:14:04
【问题描述】:

我正在开发一个带有 firebase 后端的 ios 应用程序。当用户注册时,会在 firebase 中创建用户节点,在该节点下有不同的子节点,如电子邮件、姓名、头像等。我正在做的是在用户节点中搜索一些电子邮件,如果我在某个节点中找到该电子邮件,我想要得到它的父密钥,即-Ksdd23d2djhsdgjhs。看图:

如果电子邮件与我拥有的电子邮件匹配,我想用上箭头获取值。

我有一个电子邮件地址,我正在搜索用户节点中的所有子节点,然后进一步检查内部以将电子邮件与我拥有的电子邮件进行比较。如果电子邮件匹配,我想得到它的父节点,就像在图像中它是 Dn2LUAwdolg .....。

我可以得到用户节点下的第一个节点。假设图中显示的节点 Dn2LU.. 位于某个未知位置,如果它的电子邮件子值与我正在比较的那个匹配,我必须搜索所有用户以获取它的名称。

希望现在很清楚

【问题讨论】:

  • 你从 0 的用户那里得到第一个元素
  • 请包括您迄今为止尝试过的内容以及无效的内容。你的问题是它目前的状态太宽泛,显然缺乏研究工作。
  • 让我在里面添加更多内容。
  • @JacobKaif 添加您编写的 code,这是您的问题中缺少的内容...如果您甚至不知道从哪里开始,请查看一些Firebase 教程。

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

在我的情况下,我在加载我的友谊列表所需的 UID 下还有其他 UID:

为此,我创建了这个方法

class func downloadAllFriendList(UserID:String, completion: @escaping (UserSimplifiedCredentials?) -> Swift.Void) {
    var ref = Database.database().reference().child("Friendship").child(UserID).observe(.childAdded, with: { (snapshot) in
        print("the child parent id is +++++++> \(snapshot.key)")
    })

}

【讨论】:

    【解决方案2】:

    我认为您正在寻找的内容记录在这里: https://firebase.google.com/docs/reference/js/firebase.database.Reference#equalTo

    我不是IOS开发者,但我这里是一个JS例子:

    // Find all users which match the child node email.
    var ref = firebase.database().ref('user');
    ref.orderByChild('email').equalTo('wal@aol.com').on("value", function(snapshot) {
      snapshot.forEach((function(child) { console.log(child.key) }); 
    });
    

    快照包含整个节点,但 snapshot.key 将返回节点密钥(在您的示例中:Dn2LUAwdolg...)

    【讨论】:

    • console.log() 将始终记录 user。你要么想监听on("child_added",要么遍历子节点snapshot.forEach((function(child) { console.log(child.key); })
    • 非常感谢@André。
    • @FrankvanPuffelen 你是对的,谢谢你指出这一点,我会编辑我的答案:)
    【解决方案3】:

    我正在回答我的问题,但我会支持@André 的回答,它帮助我完成了我想要的。我在这里发布了我在考虑 André 的代码时编写的 Swift 3.0 代码。

            let idtosearch = email
            let ref = Database.database().reference().child("user")
            ref.queryOrdered(byChild: "email").queryEqual(toValue: idtosearch).observeSingleEvent(of: .childAdded, with: { (snapshot) in
                print("\(snapshot.key)")
            })
    

    【讨论】:

      【解决方案4】:

      您可以使用.ref 从快照中获取引用,然后在子引用上使用.parent 获取引用的父级,然后使用.key 获取该引用的键,这将是父键你的例子:Dn2LUAwdolgf6HCn11UiSihejty1

      我们以 avata 的快照为例

      snapshot.ref.parent.key
      

      在你的情况下会相等

      Dn2LUAwdolgf6HCn11UiSihejty1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-14
        • 2015-08-30
        • 2021-05-30
        • 2018-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        相关资源
        最近更新 更多