以下示例演示如何刪除文檔、字段和集合。
刪除文件
要刪除文檔,請使用以下特定於語言的delete()
方法:
Web modular API
使用deleteDoc()
方法:
import { doc, deleteDoc } from "firebase/firestore"; await deleteDoc(doc(db, "cities", "DC"));
Web namespaced API
使用delete()
方法:
db.collection("cities").doc("DC").delete().then(() => { console.log("Document successfully deleted!"); }).catch((error) => { console.error("Error removing document: ", error); });
迅速
使用delete()
方法:
db.collection("cities").document("DC").delete() { err in if let err = err { print("Error removing document: \(err)") } else { print("Document successfully removed!") } }
目標-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"), );
爪哇
使用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; } });
節點.js
使用delete()
方法:
去
使用Delete()
方法:
PHP
使用delete()
方法:
統一
使用DeleteAsync()
方法:
DocumentReference cityRef = db.Collection("cities").Document("DC"); cityRef.DeleteAsync();
C#
使用DeleteAsync()
方法:
紅寶石
使用delete()
方法:
當您刪除文檔時,Cloud Firestore 不會自動刪除其子集合中的文檔。您仍然可以通過引用訪問子資源庫文檔。例如,即使刪除位於/mycoll/mydoc/mysubcoll/mysubdoc
/mycoll/mydoc
中的文檔。
不存在的祖先文檔出現在控制台中,但它們不會出現在查詢結果和快照中。
如果要刪除文檔及其子集合中的所有文檔,則必須手動執行。有關詳細信息,請參閱刪除集合。
刪除字段
要從文檔中刪除特定字段,請在更新文檔時使用以下特定於語言的FieldValue.delete()
方法:
Web modular API
使用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 namespaced API
使用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() });
迅速
使用FieldValue.delete()
方法:
db.collection("cities").document("BJ").updateData([ "capital": FieldValue.delete(), ]) { err in if let err = err { print("Error updating document: \(err)") } else { print("Document successfully updated") } }
目標-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);
爪哇
使用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) { /*...*/ });
節點.js
使用FieldValue.delete()
方法:
去
使用firestore.Delete
方法:
PHP
使用FieldValue::deleteField()
方法:
統一
使用FieldValue.Delete
方法:
DocumentReference cityRef = db.Collection("cities").Document("BJ"); Dictionary<string, object> updates = new Dictionary<string, object> { { "Capital", FieldValue.Delete } };
C#
使用FieldValue.Delete
方法:
紅寶石
使用firestore.field_delete
方法:
刪除集合
要刪除 Cloud Firestore 中的整個集合或子集合,請檢索(讀取)集合或子集合中的所有文檔並將其刪除。此過程會產生讀取和刪除成本。如果您有較大的集合,您可能希望以較小的批次刪除文檔以避免內存不足錯誤。重複該過程,直到您刪除了整個集合或子集合。
刪除集合需要協調無限數量的單個刪除請求。如果您需要刪除整個集合,請僅在受信任的服務器環境中執行此操作。雖然可以從移動/Web 客戶端刪除集合,但這樣做會對安全和性能產生負面影響。
下面的代碼片段有些簡化,不涉及錯誤處理、安全、刪除子集合或最大化性能。要了解有關在生產中刪除集合的推薦方法的更多信息,請參閱刪除集合和子集合。
網絡
// Deleting collections from a Web client is not recommended.
迅速
// Deleting collections from an Apple client is not recommended.
目標-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
不建議從客戶端刪除集合。
爪哇
Python
Python
C++
// This is not supported. Delete data using CLI as discussed below.
節點.js
去
PHP
統一
// This is not supported. Delete data using CLI as discussed below.
C#
紅寶石
使用 Firebase CLI 刪除數據
您還可以使用Firebase CLI刪除文檔和集合。使用以下命令刪除數據:
firebase firestore:delete [options] <<path>>
使用控制台刪除數據
您可以從控制台的 Cloud Firestore 頁面刪除文檔和集合。從控制台刪除文檔會刪除該文檔中的所有嵌套數據,包括任何子集合。
使用 TTL 策略刪除數據
TTL 策略將給定字段指定為給定集合組中文檔的過期時間。 TTL 刪除操作計入您的文檔刪除成本。
有關設置 TTL 的信息,請參閱使用 TTL 策略管理數據保留。
有關錯誤代碼以及如何解決刪除數據時的延遲問題的更多信息,請查看故障排除頁面。
使用 Dataflow 刪除數據
Dataflow 是對 Firestore 數據庫進行批量操作的絕佳工具。 Firestore connector for Dataflow 介紹博文中有一個刪除集合組中所有文檔的示例。