מחיקת מסמכים ושדות
בדוגמאות הבאות מוסבר איך למחוק מסמכים, שדות ואוספים.
מחיקת מסמכים
כדי למחוק מסמך, משתמשים בשיטות delete() הבאות שספציפיות לשפה:
גרסה 9 לאינטרנט
משתמשים בשיטה deleteDoc():
import { doc, deleteDoc } from "firebase/firestore"; await deleteDoc(doc(db, "cities", "DC"));
גרסה 8 לאינטרנט
משתמשים בשיטה 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
Android
משתמשים בשיטה 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
משתמשים בשיטה delete():
Python
משתמשים בשיטה delete():
Python
(Async)
משתמשים בשיטה 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():
המשך
משתמשים בשיטה Delete():
PHP
משתמשים בשיטה delete():
Unity
משתמשים בשיטה DeleteAsync():
DocumentReference cityRef = db.Collection("cities").Document("DC"); cityRef.DeleteAsync();
C#
משתמשים בשיטה DeleteAsync():
Ruby
משתמשים בשיטה delete():
כשמוחקים מסמך, Firestore לא מוחק באופן אוטומטי את המסמכים בקולקציות המשנה שלו. עדיין אפשר לגשת למסמכים של אוסף המשנה באמצעות הפניה.
לדוגמה, אתם יכולים לגשת למסמך בנתיב /mycoll/mydoc/mysubcoll/mysubdoc גם אם תמחקו את מסמך האב בנתיב /mycoll/mydoc.
מסמכי אב שלא קיימים מופיעים במסוף, אבל הם לא מופיעים בתוצאות של שאילתות ובצילומים.
אם רוצים למחוק מסמך ואת כל המסמכים שנמצאים בתיקיות המשנה שלו, צריך לעשות זאת באופן ידני. מידע נוסף זמין במאמר מחיקת אוספים.
מחיקת שדות
כדי למחוק שדות ספציפיים ממסמך, משתמשים בשיטות 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 לאינטרנט
משתמשים בשיטה 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
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
משתמשים בשיטה firestore.DELETE_FIELD:
Python
(Async)
משתמשים בשיטה 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():
המשך
משתמשים בשיטה 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:
מחיקת אוספים
כדי למחוק אוסף שלם או אוסף משנה ב-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 כדי לבצע פעולות בכמות גדולה במסד הנתונים. האפשרות הזו היא הכי גמישה להגדרה, אבל היא גם דורשת יותר הגדרות מאפשרויות אחרות למחיקה בכמות גדולה. בפוסט בבלוג בנושא מבוא ל-Dataflow עם מחבר Firestore יש דוגמה למחיקה של כל המסמכים בקבוצת אוספים.