值未从字典中删除
Value not being removed from dictionary
我在 Firebase 中有一个名为 peopleWhoLike
的字典,键是一个自动 ID,值是喜欢的用户的 uid,我正在尝试遍历 peopleWhoLike
字典并找到以当前用户 uid 作为值的条目,以便我可以将其删除,但该值未被删除。
func removeLike(postID: String){
ref.child("posts").child(postID).observe(.value, with: { (snapshot) in
if let info = snapshot.value as? [String : AnyObject]{
if var peopleWhoLike = info["peopleWhoLike"] as? [String : String]{
print("peopleWhoLike - \(peopleWhoLike)")
for person in peopleWhoLike{
if person.value == FIRAuth.auth()!.currentUser!.uid{
peopleWhoLike.removeValue(forKey: person.key)
print("personkey - \(person.key)")
}
}
}
}
})
}
两个打印语句都正确打印,即 person.key
是正确的键
如有任何帮助,我们将不胜感激!
那里只有数据的快照(副本)
从 firebase 数据库中删除该值;
试试这个:
//path should be like this (i guess):
let currentUserUid = FIRAuth.auth()!.currentUser!.uid
ref.child("posts")
.child(postId)
.child("peopleWhoLike")
.child(currentUserUid)
.removeValue()
或相同:
let currentUserUid = FIRAuth.auth()!.currentUser!.uid
ref.child("posts/\(postId)/peopleWhoLike/\(currentUserUid)").removeValue()
更新
您想要删除个人密钥 - 然后您可以:
a) 遍历 peopleWhoLike 并确定它是否是用户(但请将此 let currentUserUid = FIRAuth.auth()!.currentUser!.uid
放在循环之外!
//path should be like this (i guess):
let currentUserUid = FIRAuth.auth()!.currentUser!.uid
// loop and when match `person.value == currentUserUid` then:
ref.child("posts")
.child(postId)
.child("peopleWhoLike")
.child(person.key) //<-- change here
.removeValue()
b) 您在查询中搜索。然后删除结果节点。
ref.child("posts")
.child(postId)
.child("peopleWhoLike")
.startAt(currentUserId)
.endAt(currentUserId)
. [...] do something
我不知道你现在是否可以直接调用.removeValue()
。但是使用 SingleEvent 和快照,您可以 snapshot.ref.removeValue()
- 在删除之前仔细检查。但由于这会导致引用,您应该可以直接调用 .removeValue()
ref.child("posts")
.child(postId)
.child("peopleWhoLike")
.startAt(currentUserId)
.endAt(currentUserId)
.removeValue()
注意:此搜索比直接路径花费的时间更长
请参阅此处文档进行查询:
https://firebase.googleblog.com/2013/10/queries-part-1-common-sql-queries.html#byemail
https://firebase.google.com/docs/database/ios/read-and-write#delete_data
注意:
我建议您使用 userUid
作为键来保存它,因为您只需要在线删除(请参阅我的第一个代码片段,您不需要从 peopleWhoLike
获取所有数据)和作为值仅 1 或者您可以保存当前日期(然后您知道它何时被喜欢)
我在 Firebase 中有一个名为 peopleWhoLike
的字典,键是一个自动 ID,值是喜欢的用户的 uid,我正在尝试遍历 peopleWhoLike
字典并找到以当前用户 uid 作为值的条目,以便我可以将其删除,但该值未被删除。
func removeLike(postID: String){
ref.child("posts").child(postID).observe(.value, with: { (snapshot) in
if let info = snapshot.value as? [String : AnyObject]{
if var peopleWhoLike = info["peopleWhoLike"] as? [String : String]{
print("peopleWhoLike - \(peopleWhoLike)")
for person in peopleWhoLike{
if person.value == FIRAuth.auth()!.currentUser!.uid{
peopleWhoLike.removeValue(forKey: person.key)
print("personkey - \(person.key)")
}
}
}
}
})
}
两个打印语句都正确打印,即 person.key
是正确的键
如有任何帮助,我们将不胜感激!
那里只有数据的快照(副本)
从 firebase 数据库中删除该值; 试试这个:
//path should be like this (i guess):
let currentUserUid = FIRAuth.auth()!.currentUser!.uid
ref.child("posts")
.child(postId)
.child("peopleWhoLike")
.child(currentUserUid)
.removeValue()
或相同:
let currentUserUid = FIRAuth.auth()!.currentUser!.uid
ref.child("posts/\(postId)/peopleWhoLike/\(currentUserUid)").removeValue()
更新
您想要删除个人密钥 - 然后您可以:
a) 遍历 peopleWhoLike 并确定它是否是用户(但请将此 let currentUserUid = FIRAuth.auth()!.currentUser!.uid
放在循环之外!
//path should be like this (i guess):
let currentUserUid = FIRAuth.auth()!.currentUser!.uid
// loop and when match `person.value == currentUserUid` then:
ref.child("posts")
.child(postId)
.child("peopleWhoLike")
.child(person.key) //<-- change here
.removeValue()
b) 您在查询中搜索。然后删除结果节点。
ref.child("posts")
.child(postId)
.child("peopleWhoLike")
.startAt(currentUserId)
.endAt(currentUserId)
. [...] do something
我不知道你现在是否可以直接调用.removeValue()
。但是使用 SingleEvent 和快照,您可以 snapshot.ref.removeValue()
- 在删除之前仔细检查。但由于这会导致引用,您应该可以直接调用 .removeValue()
ref.child("posts")
.child(postId)
.child("peopleWhoLike")
.startAt(currentUserId)
.endAt(currentUserId)
.removeValue()
注意:此搜索比直接路径花费的时间更长
请参阅此处文档进行查询:
https://firebase.googleblog.com/2013/10/queries-part-1-common-sql-queries.html#byemail
https://firebase.google.com/docs/database/ios/read-and-write#delete_data
注意:
我建议您使用 userUid
作为键来保存它,因为您只需要在线删除(请参阅我的第一个代码片段,您不需要从 peopleWhoLike
获取所有数据)和作为值仅 1 或者您可以保存当前日期(然后您知道它何时被喜欢)