Firebase,iOS:将键值对附加到子节点

时间:2016-09-05 13:04:05

标签: firebase swift2 firebase-realtime-database

我在Firebase

中有以下用户表结构

enter image description here

正如您在用户中看到我已经打开的那样,我有一个帖子部分,在这篇文章部分中保存了Id的所有文章,这些文章都是由该用户发布的。

我面临的问题如下:

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

Users/{UserId}/Posts 

然而,所有这一切都创建了一个名为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。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

  • 为当前用户 Posts

  • FIRDatabase.database().reference().child("Users").child(FIRAuth.auth()!.currentUser!.uid).child("Posts")节点制作Firebase数据库参考
  • 检查用户数据库中是否存在Posts节点,如果没有,请在 else 块中创建一个: - parentRef.setValue([postId : "True"])

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

  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`