繁体   English   中英

Firebase如何使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM