【问题标题】:Firebase,iOS: Appending key-value pair into a child nodeFirebase,iOS:将键值对附加到子节点中
【发布时间】:2023-03-25 17:38:01
【问题描述】:

我在Firebase 中有以下用户表结构

正如您在我打开的用户中看到的那样,我有一个帖子部分,在这个帖子部分中包含该用户已发布的所有文章的 ID。

我面临的问题如下:

当用户创建一篇新文章时,它保存在 Posts 表中,保存后我返回新生成的 ID,然后将其传递给用户表,我尝试将新创建的 ID 插入到文章的帖子部分用户,所以我假设 URL 是这样的:

Users/{UserId}/Posts 

然而,这一切都创建了一个名为帖子的新部分,它实际上并没有将记录插入给定区域。

我的代码不工作如下:

let linkPost = [childautoID: true]

FIRDatabase.database().reference().child("Users/\(UserId)/Posts").child(UserId).setValue(linkPost)

仅供参考,我手动添加的帖子中当前存在的两个 id。

我还尝试了以下方法:

FIRDatabase.database().reference().child("Users/\(UserId)/Posts").setValue(linkPost)

然而,这一切都会删除所有现有的 ID,然后插入新的 ID。

【问题讨论】:

    标签: firebase swift2 firebase-realtime-database


    【解决方案1】:

    我更喜欢这样的东西。这会自动追加数据而无需先获取

    FIRDatabase.database().reference().child("Users/\(UserId)/Posts").child(UserId).setValue(true)
    

    【讨论】:

    • 适用于最新的 Swift 3.1。谢谢!
    【解决方案2】:

    要在 Firebase 数据库子节点中附加键值对,请使用:-

    • 对当前用户的 Posts 节点进行 Firebase 数据库引用FIRDatabase.database().reference().child("Users").child(FIRAuth.auth()!.currentUser!.uid).child("Posts")

    • 检查Posts 节点是否存在于您用户的数据库中,如果不存在,则通过 else 块中的 parentRef.setValue([postId : "True"]) 创建一个。

    • 但如果 Posts 节点确实存在,则将其检索为 NSMutableDictionary ,将新对象设置为它,然后将更新后的字典存储到该节点。


      func storePostsToDB(postID :String!, userID : String! = FIRAuth.auth()!.currentUser!.uid){
    
        let parentRef = FIRDatabase.database().reference().child("Users").child(userID).child("Posts")
        parentRef.observeSingleEventOfType(.Value, withBlock: {(friendsList) in
    
            if friendsList.exists(){
                 if let listDict = friendsList.value as? NSMutableDictionary{
    
                        listDict.setObject("True", forKey: postID)
                        parentRef.setValue(listDict)
    
                    }
            }else{
                parentRef.setValue([postID : "True"])
            }
        })
      }
    

    调用函数:-

      storePostsToDB("yourPostID")// If you want to store in the currentUser DB
      storePostsToDB("yourPostID", userID : otherUserID)//If you want to store the post in some other users database with uid `otherUserID`
    

    【讨论】:

    • 嘿@Dravidian,很抱歉没有尽快测试。一切都按预期工作,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多