בדוגמאות הבאות מוסבר איך למחוק מסמכים, שדות ואוספים.
מחיקת מסמכים
כדי למחוק מסמך, משתמשים בשיטות 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 ב-Console. מחיקת מסמך מהמסוף תגרום למחיקה של כל הנתונים שמוטמעים במסמך הזה, כולל כל אוספי המשנה.
Firebase CLI
אפשר גם להשתמש ב-Firebase CLI כדי למחוק מסמכים ואוספים. כדי למחוק נתונים, משתמשים בפקודה הבאה:
firebase firestore:delete --database=DATABASE_ID PATH
מחליפים את DATABASE_ID במזהה מסד הנתונים ואת PATH בנתיב למסמך או לאוסף.
למחיקה של כמות גדולה של מסמכים (מיליונים), אפשר להשתמש באחת מהאפשרויות הבאות:
מחיקה בכמות גדולה מנוהלת
Cloud Firestore תומך במחיקה בכמות גדולה של קבוצות אוספים. מידע נוסף מופיע במאמר מחיקת נתונים בכמות גדולה.
מחבר Dataflow
אפשר להשתמש ב-Dataflow כדי לבצע פעולות בכמות גדולה במסד הנתונים. האפשרות הזו היא הכי ניתנת להתאמה אישית, אבל היא גם דורשת יותר הגדרות מאפשרויות אחרות למחיקה בכמות גדולה. בפוסט בבלוג בנושא מבוא ל-Dataflow, שזמין במאמר על מחבר Cloud Firestore, יש דוגמה למחיקת כל המסמכים בקבוצת אוספים.