![](/img/trans.png)
[英]iOS Firebase -How to create multi node location update using .childByAutoId()
[英]Firebase how to save multiple children using childByAutoId()
我需要保存一个对象,并在完成autoId
带有autoId
添加到同一对象。 我目前正在保存第一个对象,并在循环后添加带有autoId
。 我想知道是否有更有效的方法来做到这一点?
let data: [String: Any] = [
"one": 1,
"two": 2,
"aboutS": "yeeah",
]
//Data to be saved with auto id after inital data saved
let mediaMetaData: [[String: Any]] = [
["path": "nda.mov", "type": "009"],
["path": "nda.mov", "type": "009"]
]
ref.getUserSkillDatabasePath(authUser).childByAutoId().setValue(data, withCompletionBlock: {
error, dbReference in
if error != nil {
print(error as Any)
}
let mediaUploadGroup = DispatchGroup()
//Loop through mediaMetaData and save children using auto id
// Wish to save all children with auto id objects at once?
mediaMetaData.forEach {
meta in
mediaUploadGroup.enter()
dbReference.child("media").childByAutoId().setValue(meta, withCompletionBlock: {_,_ in
mediaUploadGroup.leave()
})
}
mediaUploadGroup.notify(queue: .main, execute: {
completion(error)
})
})
您可以尝试使用updateChildValues进行原子写入。 因此,执行以下操作应达到相同的结果:
let data: [String: Any] = [
"one": 1,
"two": 2,
"aboutS": "yeeah",
]
let mediaMetaData: [[String: Any]] = [
["path": "nda.mov", "type": "009"],
["path": "nda.mov", "type": "009"]
]
let userRef = ref.getUserSkillDatabasePath(authUser)
let userKey = userRef.childByAutoId().key
var dataObject: [String: Any] = data
for meta in mediaMetaData {
let mediaKey = userRef.child(userKey).child("media").childByAutoId().key
dataObject["/media/\(mediaKey)"] = meta
}
userRef.child(userKey).updateChildValues(dataObject, withCompletionBlock: { _,_ in
print("Success")
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.