מחיקת מסמכים ושדות
בדוגמאות הבאות מוסבר איך למחוק מסמכים, שדות ואוספים.
מחיקת מסמכים
כדי למחוק מסמך, משתמשים בשיטות הבאות שספציפיות לשפה delete():
גרסה 9 לאינטרנט
משתמשים בשיטה deleteDoc():
import { doc, deleteDoc } from "firebase/firestore"; await deleteDoc(doc(db, "cities", "DC"));
גרסה 8 לאינטרנט
משתמשים ב-method delete():
db.collection("cities").doc("DC").delete().then(() => { console.log("Document successfully deleted!"); }).catch((error) => { console.error("Error removing document: ", error); });
Swift
משתמשים ב-method delete():
do { try await db.collection("cities").document("DC").delete() print("Document successfully removed!") } catch { print("Error removing document: \(error)") }
Objective-C
משתמשים ב-method 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
Android
משתמשים ב-method delete():
db.collection("cities").document("DC") .delete() .addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully deleted!") } .addOnFailureListener { e -> Log.w(TAG, "Error deleting document", e) }
Java
Android
משתמשים בשיטה 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
משתמשים ב-method delete():
Python
משתמשים ב-method delete():
Python
(Async)
משתמשים ב-method 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
משתמשים ב-method delete():
המשך
משתמשים בשיטה Delete():
PHP
משתמשים בשיטה delete():
Unity
משתמשים ב-method DeleteAsync():
DocumentReference cityRef = db.Collection("cities").Document("DC"); cityRef.DeleteAsync();
C#
משתמשים בשיטה DeleteAsync():
Ruby
משתמשים בשיטה delete():
כשמוחקים מסמך, Firestore לא מוחק באופן אוטומטי את המסמכים בקולקציות המשנה שלו. עדיין אפשר לגשת למסמכים של אוסף המשנה באמצעות הפניה.
לדוגמה, אפשר לגשת למסמך בנתיב /mycoll/mydoc/mysubcoll/mysubdoc גם אם מוחקים את מסמך ההורה ב-/mycoll/mydoc.
מסמכי הורה שלא קיימים מופיעים במסוף, אבל הם לא מופיעים בתוצאות של שאילתות וב-snapshots.
אם רוצים למחוק מסמך ואת כל המסמכים בקולקציות המשנה שלו, צריך לעשות זאת באופן ידני. מידע נוסף זמין במאמר מחיקת אוספים.
מחיקת שדות
כדי למחוק שדות ספציפיים ממסמך, משתמשים בשיטות FieldValue.delete() הספציפיות לשפה הבאה כשמעדכנים מסמך:
גרסה 9 לאינטרנט
משתמשים בשיטה 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() });
גרסה 8 לאינטרנט
משתמשים ב-method 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
משתמשים ב-method 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
Android
משתמשים בשיטה 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
Android
משתמשים בשיטה 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
משתמשים ב-method firestore.DELETE_FIELD:
Python
(Async)
משתמשים ב-method firestore.DELETE_FIELD:
C++
משתמשים ב-method FieldValue::Delete():
DocumentReference doc_ref = db->Collection("cities").Document("BJ"); doc_ref.Update({{"capital", FieldValue::Delete()}}) .OnCompletion([](const Future<void>& future) { /*...*/ });
Node.js
משתמשים ב-method FieldValue.delete():
המשך
משתמשים בשיטה firestore.Delete:
PHP
משתמשים ב-method FieldValue::deleteField():
Unity
משתמשים ב-method FieldValue.Delete:
DocumentReference cityRef = db.Collection("cities").Document("BJ"); Dictionary<string, object> updates = new Dictionary<string, object> { { "Capital", FieldValue.Delete } };
C#
משתמשים ב-method FieldValue.Delete:
Ruby
משתמשים בשיטה firestore.field_delete:
מחיקת אוספים
כדי למחוק אוסף או אוסף משנה שלם ב-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
Android
// Deleting collections from an Android client is not recommended.Java
Android
// Deleting collections from an Android client is not recommended.Dart
לא מומלץ למחוק אוספים מהלקוח.
Java
Python
Python
(Async)
C++
// This is not supported. Delete data using CLI as discussed below.
Node.js
המשך
PHP
Unity
// This is not supported. Delete data using CLI as discussed below.C#
Ruby
מחיקת נתונים באמצעות כללי מדיניות של TTL
מדיניות TTL מגדירה שדה מסוים כזמן התפוגה של מסמכים בקבוצת אוספים נתונה. פעולות מחיקה של TTL נכללות בעלויות של מחיקת המסמכים.
מידע נוסף על הגדרת TTL זמין במאמר ניהול שמירת הנתונים באמצעות כללי מדיניות TTL.
משימות מחיקה בכמות גדולה
ב-Firestore יש כמה כלים למחיקה בכמות גדולה. כדאי לבחור כלי בהתאם למספר המסמכים שצריך למחוק ולרמת ההגדרה הנדרשת.
למשימות קטנות יותר של אלפי מסמכים, השתמשו במסוף או ב-Firebase CLI. יכול להיות שכלים כאלה יתחילו לפעול עם פסק זמן במשימות גדולות יותר, ותצטרכו להפעיל אותם כמה פעמים.
המסוף
אפשר למחוק מסמכים ואוספים מהדף Firestore במסוף. כשמוחקים מסמך מהמסוף, כל הנתונים שמוטמעים במסמך הזה נמחקים, כולל כל אוספי המשנה.
Firebase CLI
אפשר גם להשתמש ב-Firebase CLI כדי למחוק מסמכים ואוספים. כדי למחוק נתונים, משתמשים בפקודה הבאה:
firebase firestore:delete --database=DATABASE_ID PATH
מחליפים את DATABASE_ID במזהה מסד הנתונים ואת PATH בנתיב למסמך או לאוסף.
למשימות מחיקה גדולות (מיליוני מסמכים), השתמשו באחת מהאפשרויות הבאות:
מחיקה בכמות גדולה מנוהלת
ב-Firestore אפשר למחוק כמה קבוצות של אוספים בבת אחת. מידע נוסף זמין במאמר מחיקת נתונים בכמות גדולה.
מחבר Dataflow
אתם יכולים להשתמש ב-Dataflow כדי לבצע פעולות בכמות גדולה במסד הנתונים. זו האפשרות הכי גמישה, אבל היא גם דורשת יותר הגדרות מאפשרויות אחרות למחיקה בכמות גדולה. בפוסט בבלוג, שמציג את המחבר של Firestore ל-Dataflow, יש דוגמה למחיקת כל המסמכים בקבוצת אוספים.