iOS Firebase - 如何使用 .childByAutoId() 创建多节点位置更新
iOS Firebase -How to create multi node location update using .childByAutoId()
我使用 iOS' UUID().uuidString
:
将数据发送到单个子位置
let userPostsRef = db?.child("users")?.child(\(uid))?.child("posts")?.child(theUUID) // uuid is basically the postId
userPostsRef.updateChildValues(userDict)
如果我想将数据发送到多个节点,我必须以不同方式构建节点子节点:
let userPostsRef = "/users/\(uid)/posts/\(postId)"
let postRef = "/posts/\(uid)/\(postId)"
使用第一种方法,我可以获得对 UUID 的引用,并将 uuid 作为 key/value 对作为字典的一部分发送到任何节点。但是以第二种方式我无法访问 .childByAutoId()
因为没有参考开始。
如何使用 Firebase 的 .childByAutoId()
创建多位置更新并获取对它的引用而不是 UUID().uuidString
?
let postId = UUID().uuidString // instead of uuidString I want to use .childByAutoId instead
let db = Database.database().reference()
let uid = Auth.auth().currentUser?.uid
@IBAction fileprivate func postButtonTapped(_ sender: UIButton) {
var userDict = [String:Any]()
// instead of sending self.postId I want to send .childByAutoId
userDict.updateValue(self.postId, forKey: "postId")
userDict.updateValue(commentTextField.text! forKey: "comment")
var postDict = [String:Any]()
postDict.updateValue(commentTextField.text! forKey: "comment")
let userPostsRef = "/users/\(uid)/posts/\(postId)"
let postRef = "/posts/\(uid)/\(postId)"
let multiNodeDict = [String:Any]()
multiNodeDict.updateValue(userDict, forKey: userPostsRef)
multiNodeDict.updateValue(postDict, forKey: postRef)
db.updateChildValues(multiNodeDict)
}
childByAutoId()
方法是纯客户端操作。它不会在数据库中创建子节点,而只是根据统计上保证唯一的键生成一个唯一的位置。从这个意义上说,它与 UUID 非常相似,只是具有一些特殊属性(例如基于时间戳),这使得它作为数据库键更具吸引力。
这意味着您可以调用 childByAutoId()
并从中获取密钥作为您的 postId
:
let postId = db.childByAutoId().key
我使用 iOS' UUID().uuidString
:
let userPostsRef = db?.child("users")?.child(\(uid))?.child("posts")?.child(theUUID) // uuid is basically the postId
userPostsRef.updateChildValues(userDict)
如果我想将数据发送到多个节点,我必须以不同方式构建节点子节点:
let userPostsRef = "/users/\(uid)/posts/\(postId)"
let postRef = "/posts/\(uid)/\(postId)"
使用第一种方法,我可以获得对 UUID 的引用,并将 uuid 作为 key/value 对作为字典的一部分发送到任何节点。但是以第二种方式我无法访问 .childByAutoId()
因为没有参考开始。
如何使用 Firebase 的 .childByAutoId()
创建多位置更新并获取对它的引用而不是 UUID().uuidString
?
let postId = UUID().uuidString // instead of uuidString I want to use .childByAutoId instead
let db = Database.database().reference()
let uid = Auth.auth().currentUser?.uid
@IBAction fileprivate func postButtonTapped(_ sender: UIButton) {
var userDict = [String:Any]()
// instead of sending self.postId I want to send .childByAutoId
userDict.updateValue(self.postId, forKey: "postId")
userDict.updateValue(commentTextField.text! forKey: "comment")
var postDict = [String:Any]()
postDict.updateValue(commentTextField.text! forKey: "comment")
let userPostsRef = "/users/\(uid)/posts/\(postId)"
let postRef = "/posts/\(uid)/\(postId)"
let multiNodeDict = [String:Any]()
multiNodeDict.updateValue(userDict, forKey: userPostsRef)
multiNodeDict.updateValue(postDict, forKey: postRef)
db.updateChildValues(multiNodeDict)
}
childByAutoId()
方法是纯客户端操作。它不会在数据库中创建子节点,而只是根据统计上保证唯一的键生成一个唯一的位置。从这个意义上说,它与 UUID 非常相似,只是具有一些特殊属性(例如基于时间戳),这使得它作为数据库键更具吸引力。
这意味着您可以调用 childByAutoId()
并从中获取密钥作为您的 postId
:
let postId = db.childByAutoId().key