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