مثالهای زیر نحوه حذف اسناد، فیلدها و مجموعهها را نشان میدهند.
حذف اسناد
برای حذف یک سند، از متدهای 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); });
سویفت
از متد delete() استفاده کنید:
do { try await db.collection("cities").document("DC").delete() print("Document successfully removed!") } catch { print("Error removing document: \(error)") }
هدف-سی
از متد 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"), );
جاوا
از متد delete() استفاده کنید:
پایتون
از متد delete() استفاده کنید:
Python
از متد delete() استفاده کنید:
سی++
از متد 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; } });
نود جی اس
از متد delete() استفاده کنید:
برو
از متد Delete() استفاده کنید:
پی اچ پی
از متد delete() استفاده کنید:
وحدت
از متد DeleteAsync() استفاده کنید:
DocumentReference cityRef = db.Collection("cities").Document("DC"); cityRef.DeleteAsync();
سی شارپ
از متد DeleteAsync() استفاده کنید:
روبی
از متد delete() استفاده کنید:
وقتی یک سند را حذف میکنید، Cloud Firestore به طور خودکار اسناد درون زیرمجموعههای آن را حذف نمیکند. شما همچنان میتوانید از طریق ارجاع به اسناد زیرمجموعه دسترسی داشته باشید. به عنوان مثال، حتی اگر سند جد را در /mycoll/mydoc حذف کنید، میتوانید به سند در مسیر /mycoll/mydoc/mysubcoll/mysubdoc دسترسی داشته باشید.
اسناد اجدادی که وجود ندارند در کنسول ظاهر میشوند ، اما در نتایج پرسوجو و اسنپشاتها نمایش داده نمیشوند.
اگر میخواهید یک سند و تمام اسناد درون زیرمجموعههای آن را حذف کنید، باید این کار را به صورت دستی انجام دهید. برای اطلاعات بیشتر، به بخش «حذف مجموعهها» مراجعه کنید.
حذف فیلدها
برای حذف فیلدهای خاص از یک سند، هنگام بهروزرسانی سند، از متدهای 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() });
سویفت
از متد FieldValue.delete() استفاده کنید:
do { try await db.collection("cities").document("BJ").updateData([ "capital": FieldValue.delete(), ]) print("Document successfully updated") } catch { print("Error updating document: \(error)") }
هدف-سی
از متد 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);
جاوا
از متد FieldValue.delete() استفاده کنید:
پایتون
از متد firestore.DELETE_FIELD استفاده کنید:
Python
از متد firestore.DELETE_FIELD استفاده کنید:
سی++
از متد FieldValue::Delete() استفاده کنید:
DocumentReference doc_ref = db->Collection("cities").Document("BJ"); doc_ref.Update({{"capital", FieldValue::Delete()}}) .OnCompletion([](const Future<void>& future) { /*...*/ });
نود جی اس
از متد FieldValue.delete() استفاده کنید:
برو
از متد firestore.Delete استفاده کنید:
پی اچ پی
از متد FieldValue::deleteField() استفاده کنید:
وحدت
از متد FieldValue.Delete استفاده کنید:
DocumentReference cityRef = db.Collection("cities").Document("BJ"); Dictionary<string, object> updates = new Dictionary<string, object> { { "Capital", FieldValue.Delete } };
سی شارپ
از متد FieldValue.Delete استفاده کنید:
روبی
از متد firestore.field_delete استفاده کنید:
حذف مجموعهها
برای حذف کل یک مجموعه یا زیرمجموع در Cloud Firestore ، تمام اسناد موجود در مجموعه یا زیرمجموع را بازیابی (بخوانید) و آنها را حذف کنید. این فرآیند شامل هزینههای خواندن و حذف میشود. اگر مجموعههای بزرگتری دارید، ممکن است بخواهید اسناد را در دستههای کوچکتر حذف کنید تا از خطاهای کمبود حافظه جلوگیری شود. این فرآیند را تا زمانی که کل مجموعه یا زیرمجموع را حذف کنید، تکرار کنید.
حذف یک مجموعه نیاز به هماهنگی تعداد نامحدودی از درخواستهای حذف جداگانه دارد. اگر نیاز به حذف کل مجموعهها دارید، این کار را فقط از یک محیط سرور قابل اعتماد انجام دهید. اگرچه حذف یک مجموعه از طریق یک کلاینت موبایل/وب امکانپذیر است، اما انجام این کار پیامدهای امنیتی و عملکردی منفی دارد.
قطعه کدهای زیر برای وضوح بیشتر سادهسازی شدهاند و شامل مدیریت خطا، امنیت، حذف زیرمجموعهها یا بهینهسازی عملکرد نمیشوند. برای کسب اطلاعات بیشتر در مورد یک رویکرد پیشنهادی برای حذف مجموعهها در محیط عملیاتی، به بخش «حذف مجموعهها و زیرمجموعهها» مراجعه کنید.
وب
// Deleting collections from a Web client is not recommended.سویفت
// Deleting collections from an Apple client is not recommended.هدف-سی
// 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
حذف مجموعهها از کلاینت توصیه نمیشود.
جاوا
پایتون
Python
سی++
// This is not supported. Delete data using CLI as discussed below.
نود جی اس
برو
پی اچ پی
وحدت
// This is not supported. Delete data using CLI as discussed below.سی شارپ
روبی
حذف دادهها با سیاستهای TTL
یک سیاست TTL، یک فیلد مشخص را به عنوان زمان انقضا برای اسناد در یک گروه جمعآوری مشخص تعیین میکند. عملیات حذف TTL در هزینههای حذف سند شما محاسبه میشود.
برای اطلاعات بیشتر در مورد تنظیم TTL، به مدیریت نگهداری دادهها با سیاستهای TTL مراجعه کنید.
کارهای حذف دسته جمعی
Cloud Firestore از ابزارهای مختلفی برای حذف دستهای پشتیبانی میکند. شما باید ابزاری را بر اساس تعداد اسنادی که باید حذف کنید و سطح قابلیت پیکربندی مورد نیاز خود انتخاب کنید.
برای کارهای کوچکتر شامل هزاران سند، از کنسول یا Firebase CLI استفاده کنید. برای کارهای بزرگتر، این ابزارها ممکن است دچار وقفه زمانی شوند و لازم باشد ابزار را چندین بار اجرا کنید.
کنسول
شما میتوانید اسناد و مجموعهها را از صفحه Cloud Firestore در کنسول حذف کنید . حذف یک سند از کنسول، تمام دادههای تو در تو در آن سند، از جمله هر زیرمجموعهای را حذف میکند.
رابط خط فرمان فایربیس
همچنین میتوانید از رابط خط فرمان فایربیس (Firebase CLI) برای حذف اسناد و مجموعهها استفاده کنید. برای حذف دادهها از دستور زیر استفاده کنید:
firebase firestore:delete --database=DATABASE_ID PATH
به جای DATABASE_ID شناسه پایگاه داده خود و به جای PATH ، مسیر سند یا مجموعه را وارد کنید.
برای کارهای حذف بزرگ (میلیونها سند)، از یکی از موارد زیر استفاده کنید:
حذف انبوه مدیریتشده
Cloud Firestore از حذف دسته جمعی یک یا چند گروه جمعآوری پشتیبانی میکند. برای اطلاعات بیشتر، به حذف دسته جمعی دادهها مراجعه کنید.
کانکتور جریان داده
شما میتوانید از Dataflow برای عملیات گروهی روی پایگاه داده خود استفاده کنید. این گزینه بیشترین قابلیت پیکربندی را دارد، اما نسبت به سایر گزینههای حذف گروهی به تنظیمات بیشتری نیاز دارد. به پست وبلاگ معرفی Dataflow در بخش کانکتور Cloud Firestore مراجعه کنید که مثالی از حذف همه اسناد در یک گروه مجموعه دارد.