我当前的Firebase结构是“用户集合”,然后具有习惯的子集合。对于给定的用户,我希望他们能够添加到自己的例程集合中。但是,遇到了一个问题。当我运行下面的函数时,它只是创建具有单独例程的单独用户。如何将新例程与当前经过身份验证的用户联系起来?
func addData(routineMsg: String){
let db = Firestore.firestore()
let user = db.collection("users").document()
let routine = db.collection("users").document("GzsHAHq1P0uXGdlYwF8P").collection("routines").document()
routine.setData(["id": routine.documentID, "routine": routineMsg]) { err in
if err != nil {
print((err?.localizedDescription)!)
return
}
}
}
现在,代码显示了如何将其硬编码到某个文档(GzsHAHq1P0uXGdlYwF8P),但是希望能够由用户动态确定该文档
答案 0 :(得分:1)
let user = db.collection("users").document()
通过不传递document()
参数,您正在执行的操作是使用自动生成的文档ID创建新的文档引用。您想要做的是通过带有字符串的方法来传递该方法来查找用户的文档。理想情况下,这将是用户的ID:
guard let uid = Auth.auth().currentUser?.uid else {
return
}
let userDocRef = db.collection("users").document(uid)
从那里开始,要在子集合中生成随机文档ID,请执行之前的操作:
func addData(routineMsg: String) {
guard let uid = Auth.auth().currentUser?.uid else {
return
}
let db = Firestore.firestore()
let userDocRef = db.collection("users").document(uid)
let routineDocRef = userDocRef.collection("routines").document()
routineDocRef.setData([
"id": routineDocRef.documentID,
"routine": routineMsg
]) { error in
if let error = error {
print(error)
}
}
}