ตัวอย่างต่อไปนี้แสดงวิธีลบเอกสาร ฟิลด์ และคอลเล็กชัน
ลบเอกสาร
หากต้องการลบเอกสาร ให้ใช้delete()
วิธีการต่อไปนี้สำหรับแต่ละภาษา
Web
ใช้วิธี deleteDoc()
ดังนี้
import { doc, deleteDoc } from "firebase/firestore"; await deleteDoc(doc(db, "cities", "DC"));
Web
ใช้วิธี delete()
ดังนี้
db.collection("cities").doc("DC").delete().then(() => { console.log("Document successfully deleted!"); }).catch((error) => { console.error("Error removing document: ", error); });
Swift
ใช้วิธี delete()
ดังนี้
do { try await db.collection("cities").document("DC").delete() print("Document successfully removed!") } catch { print("Error removing document: \(error)") }
Objective-C
ใช้วิธี deleteDocumentWithCompletion:
ดังนี้
[[[self.db collectionWithPath:@"cities"] documentWithPath:@"DC"] deleteDocumentWithCompletion:^(NSError * _Nullable error) { if (error != nil) { NSLog(@"Error removing document: %@", error); } else { NSLog(@"Document successfully removed!"); } }];
Kotlin
ใช้วิธี delete()
ดังนี้
db.collection("cities").document("DC") .delete() .addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully deleted!") } .addOnFailureListener { e -> Log.w(TAG, "Error deleting document", e) }
Java
ใช้วิธี delete()
ดังนี้
db.collection("cities").document("DC") .delete() .addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { Log.d(TAG, "DocumentSnapshot successfully deleted!"); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "Error deleting document", e); } });
Dart
ใช้วิธี delete()
ดังนี้
db.collection("cities").doc("DC").delete().then( (doc) => print("Document deleted"), onError: (e) => print("Error updating document $e"), );
Java
ใช้วิธี delete()
ดังนี้
Python
ใช้วิธี delete()
ดังนี้
Python
ใช้วิธี delete()
ดังนี้
C++
ใช้วิธี Delete()
ดังนี้
db->Collection("cities").Document("DC").Delete().OnCompletion( [](const Future<void>& future) { if (future.error() == Error::kErrorOk) { std::cout << "DocumentSnapshot successfully deleted!" << std::endl; } else { std::cout << "Error deleting document: " << future.error_message() << std::endl; } });
Node.js
ใช้วิธี delete()
ดังนี้
Go
ใช้วิธี Delete()
ดังนี้
PHP
ใช้วิธี delete()
ดังนี้
Unity
ใช้วิธี DeleteAsync()
ดังนี้
DocumentReference cityRef = db.Collection("cities").Document("DC"); cityRef.DeleteAsync();
C#
ใช้วิธี DeleteAsync()
ดังนี้
Ruby
ใช้วิธี delete()
ดังนี้
เมื่อคุณลบเอกสาร Cloud Firestoreจะไม่ลบเอกสารภายในคอลเล็กชันย่อยโดยอัตโนมัติ
คุณยังคงเข้าถึงเอกสารของคอลเล็กชันย่อยได้โดยใช้การอ้างอิง
เช่น คุณสามารถเข้าถึงเอกสารที่เส้นทาง
/mycoll/mydoc/mysubcoll/mysubdoc
ได้
แม้ว่าจะลบเอกสารต้นทางที่ /mycoll/mydoc
แล้วก็ตาม
เอกสารบรรพบุรุษที่ไม่มีอยู่จะปรากฏในคอนโซล แต่จะไม่ปรากฏในผลการค้นหาและสแนปชอต
หากต้องการลบเอกสารและเอกสารทั้งหมดภายในคอลเล็กชันย่อย คุณต้องลบด้วยตนเอง ดูข้อมูลเพิ่มเติมได้ที่ลบคอลเล็กชัน
ลบฟิลด์
หากต้องการลบบางฟิลด์ออกจากเอกสาร ให้ใช้FieldValue.delete()
วิธีการ
เฉพาะภาษาต่อไปนี้เมื่ออัปเดตเอกสาร
Web
ใช้วิธี deleteField()
ดังนี้
import { doc, updateDoc, deleteField } from "firebase/firestore"; const cityRef = doc(db, 'cities', 'BJ'); // Remove the 'capital' field from the document await updateDoc(cityRef, { capital: deleteField() });
Web
ใช้วิธี FieldValue.delete()
ดังนี้
var cityRef = db.collection('cities').doc('BJ'); // Remove the 'capital' field from the document var removeCapital = cityRef.update({ capital: firebase.firestore.FieldValue.delete() });
Swift
ใช้วิธี FieldValue.delete()
ดังนี้
do { try await db.collection("cities").document("BJ").updateData([ "capital": FieldValue.delete(), ]) print("Document successfully updated") } catch { print("Error updating document: \(error)") }
Objective-C
ใช้วิธี fieldValueForDelete:
ดังนี้
[[[self.db collectionWithPath:@"cities"] documentWithPath:@"BJ"] updateData:@{ @"capital": [FIRFieldValue fieldValueForDelete] } completion:^(NSError * _Nullable error) { if (error != nil) { NSLog(@"Error updating document: %@", error); } else { NSLog(@"Document successfully updated"); } }];
Kotlin
ใช้วิธี FieldValue.delete()
ดังนี้
val docRef = db.collection("cities").document("BJ") // Remove the 'capital' field from the document val updates = hashMapOf<String, Any>( "capital" to FieldValue.delete(), ) docRef.update(updates).addOnCompleteListener { }
Java
ใช้วิธี FieldValue.delete()
ดังนี้
DocumentReference docRef = db.collection("cities").document("BJ"); // Remove the 'capital' field from the document Map<String,Object> updates = new HashMap<>(); updates.put("capital", FieldValue.delete()); docRef.update(updates).addOnCompleteListener(new OnCompleteListener<Void>() { // ... // ...
Dart
ใช้วิธี FieldValue.delete()
ดังนี้
final docRef = db.collection("cities").doc("BJ"); // Remove the 'capital' field from the document final updates = <String, dynamic>{ "capital": FieldValue.delete(), }; docRef.update(updates);
Java
ใช้วิธี FieldValue.delete()
ดังนี้
Python
ใช้วิธี firestore.DELETE_FIELD
ดังนี้
Python
ใช้วิธี firestore.DELETE_FIELD
ดังนี้
C++
ใช้วิธี FieldValue::Delete()
ดังนี้
DocumentReference doc_ref = db->Collection("cities").Document("BJ"); doc_ref.Update({{"capital", FieldValue::Delete()}}) .OnCompletion([](const Future<void>& future) { /*...*/ });
Node.js
ใช้วิธี FieldValue.delete()
ดังนี้
Go
ใช้วิธี firestore.Delete
ดังนี้
PHP
ใช้วิธี FieldValue::deleteField()
ดังนี้
Unity
ใช้วิธี FieldValue.Delete
ดังนี้
DocumentReference cityRef = db.Collection("cities").Document("BJ"); Dictionary<string, object> updates = new Dictionary<string, object> { { "Capital", FieldValue.Delete } };
C#
ใช้วิธี FieldValue.Delete
ดังนี้
Ruby
ใช้วิธี firestore.field_delete
ดังนี้
ลบคอลเล็กชัน
หากต้องการลบคอลเล็กชันหรือคอลเล็กชันย่อยทั้งหมดใน Cloud Firestore ให้เรียกข้อมูล (อ่าน) เอกสารทั้งหมดภายในคอลเล็กชันหรือคอลเล็กชันย่อย แล้วลบ เอกสารเหล่านั้น กระบวนการนี้จะทำให้เกิดค่าใช้จ่ายทั้งในการอ่านและการลบ หากมีคอลเล็กชันขนาดใหญ่ คุณอาจต้องลบเอกสารเป็นชุดเล็กๆ เพื่อหลีกเลี่ยงข้อผิดพลาด หน่วยความจำไม่พอ ทำกระบวนการนี้ซ้ำจนกว่าจะลบ คอลเล็กชันหรือคอลเล็กชันย่อยทั้งหมด
การลบคอลเล็กชันต้องประสานงานกับคำขอลบแต่ละรายการจำนวนไม่จำกัด หากต้องการลบคอลเล็กชันทั้งหมด ให้ลบจากสภาพแวดล้อมของเซิร์ฟเวอร์ที่เชื่อถือได้เท่านั้น แม้ว่าจะลบคอลเล็กชัน จากไคลเอ็นต์บนอุปกรณ์เคลื่อนที่/เว็บได้ แต่การดำเนินการดังกล่าวจะส่งผลเสียต่อความปลอดภัยและประสิทธิภาพ
ข้อมูลโค้ดต่อไปนี้ได้รับการปรับให้ง่ายขึ้นเพื่อความชัดเจนและไม่มีการจัดการข้อผิดพลาด ความปลอดภัย การลบคอลเล็กชันย่อย หรือการเพิ่มประสิทธิภาพ ดูข้อมูลเพิ่มเติม เกี่ยวกับแนวทางที่แนะนำในการลบคอลเล็กชันในเวอร์ชันที่ใช้งานจริงได้ที่ การลบคอลเล็กชันและคอลเล็กชันย่อย
เว็บ
// Deleting collections from a Web client is not recommended.
Swift
// Deleting collections from an Apple client is not recommended.
Objective-C
// Deleting collections from an Apple client is not recommended.
Kotlin
// Deleting collections from an Android client is not recommended.
Java
// Deleting collections from an Android client is not recommended.
Dart
ไม่แนะนำให้ลบคอลเล็กชันจากไคลเอ็นต์
Java
Python
Python
C++
// This is not supported. Delete data using CLI as discussed below.
Node.js
Go
PHP
Unity
// This is not supported. Delete data using CLI as discussed below.
C#
Ruby
ลบข้อมูลด้วยนโยบาย TTL
นโยบาย TTL จะกำหนดฟิลด์ที่ระบุเป็นเวลาหมดอายุของเอกสารในกลุ่มคอลเล็กชันที่ระบุ การดำเนินการลบ TTL จะนับรวมในค่าใช้จ่ายในการลบเอกสาร
ดูข้อมูลเกี่ยวกับการตั้งค่า TTL ได้ที่หัวข้อจัดการการเก็บรักษาข้อมูลด้วยนโยบาย TTL
งานการลบแบบกลุ่ม
Cloud Firestore รองรับเครื่องมือหลายอย่างสำหรับการลบแบบเป็นกลุ่ม คุณควรเลือกเครื่องมือตามจำนวนเอกสารที่ต้องการลบและระดับการกำหนดค่าที่ต้องการ
สำหรับงานขนาดเล็กที่มีเอกสารหลายพันรายการ ให้ใช้คอนโซลหรือ Firebase CLI สำหรับงานขนาดใหญ่ เครื่องมือเหล่านี้อาจเริ่มหมดเวลาและกำหนดให้คุณเรียกใช้เครื่องมือหลายครั้ง
คอนโซล
คุณลบเอกสารและคอลเล็กชันได้จากหน้า Cloud Firestoreในคอนโซล การลบเอกสารจากคอนโซลจะเป็นการลบข้อมูลที่ฝังทั้งหมดในเอกสารนั้น รวมถึงคอลเล็กชันย่อย
Firebase CLI
นอกจากนี้ คุณยังใช้ Firebase CLI เพื่อลบเอกสารและคอลเล็กชันได้ด้วย ใช้คำสั่งต่อไปนี้เพื่อลบ ข้อมูล
firebase firestore:delete --database=DATABASE_ID PATH
แทนที่ DATABASE_ID ด้วยรหัสฐานข้อมูล และ PATH ด้วยเส้นทางไปยังเอกสารหรือคอลเล็กชัน
สำหรับงานลบขนาดใหญ่ (เอกสารหลายล้านรายการ) ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้
การลบแบบกลุ่มที่มีการจัดการ
Cloud Firestore รองรับการลบกลุ่มคอลเล็กชันอย่างน้อย 1 กลุ่มพร้อมกัน ดูข้อมูลเพิ่มเติมได้ที่ลบข้อมูลหลายรายการพร้อมกัน
เครื่องมือเชื่อมต่อ Dataflow
คุณใช้ Dataflow สำหรับการดำเนินการแบบกลุ่มในฐานข้อมูลได้ ตัวเลือกนี้กำหนดค่าได้มากที่สุด แต่ก็ต้องมีการตั้งค่ามากกว่าตัวเลือกการลบแบบกลุ่มอื่นๆ ดูตัวเชื่อมต่อ Cloud Firestore สำหรับ ข้อมูลเบื้องต้นเกี่ยวกับ Dataflow บล็อกโพสต์ มีตัวอย่างการลบเอกสารทั้งหมดในกลุ่มคอลเล็กชัน