import FirebaseFirestore
// Firestoreのインスタンスを取得
let db = Firestore.firestore()
// サブコレクションとコレクションを同時に削除する関数の例
func deleteCollectionWithSubcollections(collectionPath: String, completion: @escaping (Error?) -> Void) {
db.collection(collectionPath).getDocuments { (querySnapshot, error) in
if let error = error {
completion(error)
return
}
// トランザクションを実行
db.runTransaction({ (transaction, errorPointer) -> Any? in
// メインコレクション内の全てのドキュメントを削除
//querySnapshotはsubCollectionで複数ある
querySnapshot?.documents.forEach { document in
// サブコレクションも削除
let subCollectionRef = document.reference.collection("サブコレクション名")
subCollectionRef.getDocuments(completion: { (subQuerySnapshot, subError) in
if let subError = subError {
errorPointer?.pointee = subError as NSError
return
}
//subcollectionは複数あるのですべて処理しておく
subQuerySnapshot?.documents.forEach { subDocument in
transaction.deleteDocument(subDocument.reference)
}
// メインドキュメントを削除
transaction.deleteDocument(document.reference)
})
}
return nil
}) { (_, error) in
if let error = error {
completion(error)
} else {
completion(nil)
}
}
}
}
// 使用例:コレクションとそのサブコレクションを削除する
let collectionPath = "コレクション名"
deleteCollectionWithSubcollections(collectionPath: collectionPath) { error in
//オプショナルバインディング
if let error = error {
print("トランザクションエラー:", error.localizedDescription)
} else {
print("Transaction complete.")
}
}
このSwiftのコードは、Firebase Firestoreで指定したコレクションとそのサブコレクションを同時に削除する処理を行います。
deleteCollectionWithSubcollections
関数は、指定されたコレクションに対してトランザクションを使用してドキュメントを削除します。
削除が成功した場合は “Transaction complete.” が、エラーが発生した場合は “トランザクションエラー:” とエラーメッセージが出力されます。