首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Firebase中获取子级的父级

在Firebase中获取子级的父级
EN

Stack Overflow用户
提问于 2021-09-13 18:03:14
回答 1查看 189关注 0票数 0

我在从Firebase数据库检索子密钥和父密钥时遇到了问题。

我有一个防火墙数据库,如下所示:

代码语言:javascript
复制
- friendlies
    - 38UUDYtde4WF5AVcxcw6o9qaPBM2
        - GYtQbt3KX1RveVeBAHd08u0Pdm42: true
    - GYtQbt3KX1RveVeBAHd08u0Pdm42
        - 38UUDYtde4WF5AVcxcw6o9qaPBM2: true

我正在通过以下途径成功地获得这些数据:

代码语言:javascript
复制
var REF_FRIENDLIES = Database.database().reference().child("friendlies")
REF.FRIENDLIES.queryOrderedByKey().observeSingleEvent(of: .value, with: {
        snapshot in
        snapshot.children.forEach({
            (snapChild) in
            print("SnapChild: \(snapChild)")
            let child = snapChild as! DataSnapshot
            print("Child Key: \(child.key)")
            print("Child Parent Key: \(child.ref.parent?.key)")
        })
        print("Snapshot: \(snapshot)")
    })

它的输出如下:

代码语言:javascript
复制
SnapChild: Snap (38UUDYtde4WF5AVcxcw6o9qaPBM2) {
    GYtQbt3KX1RveVeBAHd08u0Pdm42 = 1;
}
Child Key: 38UUDYtde4WF5AVcxcw6o9qaPBM2
Child Parent Key: Optional("friendlies")


SnapChild: Snap (GYtQbt3KX1RveVeBAHd08u0Pdm42) {
    38UUDYtde4WF5AVcxcw6o9qaPBM2 = 1;
}
Child Key: GYtQbt3KX1RveVeBAHd08u0Pdm42
Child Parent Key: Optional("friendlies")


Snapshot: Snap (friendlies) {
    38UUDYtde4WF5AVcxcw6o9qaPBM2 =     {
        GYtQbt3KX1RveVeBAHd08u0Pdm42 = 1;
    };
    GYtQbt3KX1RveVeBAHd08u0Pdm42 =     {
        38UUDYtde4WF5AVcxcw6o9qaPBM2 = 1;
    };
}

子键正常工作;我遇到的问题是检索父数据。我想返回的是一个子ID,以及它的持有者/父数据。因此,我想将GYtQbt3KX1RveVeBAHd08u0Pdm42作为子键返回,而检索38UUDYtde4WF5AVcxcw6o9qaPBM2作为父键,但是作为父键返回的是friendlies

快照清楚地包含了这一点,但是我不知道如何访问它。

编辑

因此,child.ref.description()将返回我想要的节点,但在我的数据库地址的末尾:

https://my-project.firebaseio.com/friendlies/38UUDYtde4WF5AVcxcw6o9qaPBM2和我只需替换字符串的url部分,但这似乎是一种非常糟糕的做法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-13 18:28:08

由于您在snapshot.children上循环,父级的键始终是snapshot.key

我认为您要做的是遍历friendlies下的两个子节点级别。但要做到这一点,您需要两个循环:

代码语言:javascript
复制
var REF_FRIENDLIES = Database.database().reference().child("friendlies")
REF.FRIENDLIES.queryOrderedByKey().observeSingleEvent(of: .value, with: {
        snapshot in
        snapshot.children.forEach({ (snapChild) in
            let child = snapChild as! DataSnapshot
            child.children.forEach({ (snapGrandchild) in
                let grandchild = snapGrandchild as! DataSnapshot
                print("Grandchild Key: \(grandchild.key)")
                print("Grandchild Parent Key: \(child.key)")
            })
        })
    })

我可能在代码中遗漏了一些空处理,但我希望流程是清楚的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69167221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档