Ios 如何仅删除Firebase值的父键?

Ios 如何仅删除Firebase值的父键?,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我对使用Firebase是相当陌生的,我正在努力只访问父键来删除该值 我当前正在尝试使用以下代码访问父密钥: if let exerciseName = exercises[indexPath.row].exerciseName { let ref = FIRDatabase.database().reference().child("userExercises") ref.queryOrdered(byChild: "exerciseName").queryEqual(to

我对使用Firebase是相当陌生的,我正在努力只访问父键来删除该值

我当前正在尝试使用以下代码访问父密钥:

if let exerciseName = exercises[indexPath.row].exerciseName {

    let ref = FIRDatabase.database().reference().child("userExercises")

    ref.queryOrdered(byChild: "exerciseName").queryEqual(toValue: exerciseName).observe(.childAdded, with: { (snapshot) in

            print(snapshot.ref)

    })

}
我的数据结构如下所示:

但是当我打印出这些值时,如果数据库中有另一个用户具有相同的
exerciseName
,它会打印出所有的父键

如何仅删除已选择要删除的记录

当我打印(快照)时,结果是:

Snap (-KWw9hg2Uiyo9_cj7TAy) {
    bodyPart = Back;
    exerciseName = "Test 2";
    userId = 8rHmyTxdocTEvk1ERiiavjMUYyD3;
}
Snap (-KWwAGd3t9vsW0LHKtV1) {
    bodyPart = Arms;
    exerciseName = "Test 2";
    userId = PO8p0UoqqHOas3D9Ise8CgWT3PN2;
}
尝试:

要删除其中一条记录,请执行以下操作:

    let ref = FIRDatabase.database().reference().child("userExcercises").child(record_id) // see above how to fetch the id
    ref.removeValue()
我建议您重组您的用户练习,如下所示:

{
    "userExcercises" : {
        "<USER-ID>" : {
            "<EXCERCISE-ID>" : {
                "bodyPart" : "Back",
                "excerciseName" : "Test02"
            },
            // lots of more excercises for this user ...
        },
        // lots of more users ...
     }
}
{
“用户练习”:{
"" : {
"" : {
“身体部位”:“背部”,
“练习名称”:“Test02”
},
//为该用户提供更多练习。。。
},
//更多的用户。。。
}
}
需要说明的是:USER-ID是经过身份验证的用户的uid,exercise-ID是自动生成的(childByAutoId())ID

请尝试:

要删除其中一条记录,请执行以下操作:

    let ref = FIRDatabase.database().reference().child("userExcercises").child(record_id) // see above how to fetch the id
    ref.removeValue()
我建议您重组您的用户练习,如下所示:

{
    "userExcercises" : {
        "<USER-ID>" : {
            "<EXCERCISE-ID>" : {
                "bodyPart" : "Back",
                "excerciseName" : "Test02"
            },
            // lots of more excercises for this user ...
        },
        // lots of more users ...
     }
}
{
“用户练习”:{
"" : {
"" : {
“身体部位”:“背部”,
“练习名称”:“Test02”
},
//为该用户提供更多练习。。。
},
//更多的用户。。。
}
}

需要明确的是:USER-ID是经过身份验证的用户的uid,exercise-ID是一个自动生成的(childByAutoId())ID

您可以发布“打印(快照)”的内容。它打印出两个值:“tracker-test-c61e6.firebaseio.com/userexerces/-KWw9hg2Uiyo9_cj7TAy”“tracker-test-c61e6.firebaseio.com/userexerces/-KWwAGd3t9vsW0LHKtV1”否,发布
print(snaphot)
在您的问题中所说的内容,编辑它。不是snapshot.ref最初获取用户数据时,您需要保存记录id(请参见下面的答案)。那么你所需要做的就是删除那条记录。。。没有任何疑问。如果你从未向用户B展示过用户A的用户练习,你应该重新构造你的数据…感谢你的帮助,你会建议我如何重新构造我的数据,因为我从未打算向用户展示自定义练习。你能发布“打印(快照)”所说的内容吗。它打印出两个值:“tracker-test-c61e6.firebaseio.com/userexerces/-KWw9hg2Uiyo9_cj7TAy”“tracker-test-c61e6.firebaseio.com/userexerces/-KWwAGd3t9vsW0LHKtV1”不,发布
打印(snaphot)
问题中的内容,编辑它。而不是snapshot.ref最初获取用户数据时,您需要保存记录id(见下面我的答案)。然后,您只需删除该记录,而无需进行任何查询。如果您从未向用户B显示用户A的用户练习,您应该重新构造数据…感谢您的帮助。它提供了巨大的帮助,您会建议我如何重新构造数据,因为我从未打算向用户彼此显示自定义练习?