gpt4 book ai didi

swift - 删除带有子值的父节点

转载 作者:行者123 更新时间:2023-11-30 11:24:33 25 4
gpt4 key购买 nike

我正在努力克服我遇到的问题。我正在尝试删除父节点/键,因为我找到了正确的子值。

My database is structure liked this

我正在通过特定值 objectID 查询数据库,因为它将与通过参数传递的 postID 相匹配。 objectID 值已删除。然而,我正在努力取出它所在的 key 。

到目前为止,我的结果好坏参半:

我可以使用以下代码删除 objectID 值:

refSnap?.ref.child("objectID").child(postID).removeValue()

我可以使用以下命令删除整个通知节点/目录:

refSnap?.ref.child("objectID").queryEqual(toValue: postID).ref.removeValue()

refSnap?.key 为我提供了 notifications 节点下的所有键/节点。

我无法访问存储 objectID 和所有其他信息的 key ,因为它是 .childByAutoId。谁能帮我解决这个问题?

最佳答案

虽然另一个答案提供了一些关于替代且可行的结构的见解,但删除基于子节点的节点的能力相当简单,并且可以直接解决问题而无需更改结构。

(请注意,无论如何,结构可能都需要更改,但对于本练习,我们将按原样使用它。)

鉴于问题中建议的结构:

notification
"rtupy..." //childByAutoId
"-LFEMjAcny..." // childByAutoId
"-LFEzrrq..." // childByAutoId
from: "aw,sdasdad"
objectID: "-LFEMjAcn...."
timestamp: 15292
type: "comment"

假设您要删除节点“-LFEzrrq...”,如屏幕截图所示。该节点包含子 objectID:“-LFEMjAcn....”

要删除节点,您需要查询包含所需 objectID 的节点,根据问题,该节点正在工作并返回正确的子节点。

使用返回的快照获取其父键,并获取该节点的路径并将其删除。请注意,我们不知道 OP 使用什么过程或代码来获取他们想要删除的节点 - 也许它来自另一个查询,并且节点引用是通过或其他方式传入的。

let queryRef = //unknown how, but build the query for objectID = "-LFEMjAcny...."
queryRef.observeSingleEvent(of: .value, with: { snapshot in
let key = snapshot.key //this is the parent key of the objectID node i.e. -LFEMzrrq..."
let parentRef = snapshot.ref.parent! //this is the path to that parent
let refToDelete = parentRef.child(key) //add the parent key to the path: -LFEzrrq
refToDelete.removeValue() //delete it
})

正如您所看到的,无论父节点的键是什么,或者它有多深,此代码都会删除查询中找到的节点。

键名称并不重要,因此使用 .childByAutoId 作为将节点绑定(bind)在一起的引用是安全的,并且通常是最佳实践,因为将节点键与其包含的数据分离可以使您的结构高度可扩展。

关于swift - 删除带有子值的父节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50901337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com