בדוגמאות הבאות מוסבר איך למחוק מסמכים, שדות ואוספים.
מחיקת מסמכים
כדי למחוק מסמך, משתמשים בשיטות 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+KTX
משתמשים בשיטה 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
.
מסמכי אב לא קיימים מופיעים במסוף, אבל הם לא מופיעים בתוצאות של שאילתות ובתמונות מצב.
אם רוצים למחוק מסמך ואת כל המסמכים באוספים המשניים שלו, צריך לעשות זאת באופן ידני. מידע נוסף זמין במאמר מחיקת אוספים.
מחיקת שדות
כדי למחוק שדות ספציפיים ממסמך, משתמשים ב-methods 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+KTX
משתמשים בשיטה 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+KTX
// 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
מחיקת נתונים באמצעות Firebase CLI
אפשר גם להשתמש ב-CLI של Firebase כדי למחוק מסמכים ואוספים. כדי למחוק נתונים, משתמשים בפקודה הבאה:
firebase firestore:delete [options] <<path>>
מחיקת נתונים באמצעות המסוף
אפשר למחוק מסמכים ואוספים מהדף Cloud Firestore במסוף. מחיקת מסמך מהמסוף מוחקת את כל הנתונים בתצוגת עץ במסמך הזה, כולל אוספים משניים.
מחיקת נתונים באמצעות מדיניות TTL
מדיניות TTL מציינת שדה מסוים כזמן התפוגה של מסמכים בקבוצת אוספים נתונה. פעולות מחיקה של TTL נכללות בעלויות המחיקה של המסמכים.
מידע נוסף על הגדרת TTL זמין במאמר ניהול שמירת הנתונים באמצעות מדיניות TTL.
מידע נוסף על קודי שגיאה ועל פתרון בעיות של זמן אחזור בזמן מחיקת נתונים זמין בדף פתרון בעיות.
מחיקת נתונים באמצעות Dataflow
Dataflow הוא כלי מצוין לפעולות בכמות גדולה במסד הנתונים של Firestore. בפוסט בבלוג שמציג את המחבר של Firestore ל-Dataflow יש דוגמה למחיקת כל המסמכים בקבוצת אוספים.
שימוש במחיקה מנוהלת בכמות גדולה
Cloud Firestore תומך במחיקה בכמות גדולה של קבוצות אוספים אחת או יותר. מידע נוסף זמין במאמר מחיקת נתונים בכמות גדולה.