Delete data from Cloud Firestore

The following examples demonstrate how to delete documents, fields, and collections.

Delete documents

To delete a document, use the following language-specific delete() methods:

Web

Use the deleteDoc() method:

 import 
  
 { 
  
 doc 
 , 
  
 deleteDoc 
  
 } 
  
 from 
  
 "firebase/firestore" 
 ; 
 await 
  
 deleteDoc 
 ( 
 doc 
 ( 
 db 
 , 
  
 "cities" 
 , 
  
 "DC" 
 )); 
  

Web

Use the delete() method:

 db 
 . 
 collection 
 ( 
 "cities" 
 ). 
 doc 
 ( 
 "DC" 
 ). 
 delete 
 (). 
 then 
 (() 
  
 = 
>  
 { 
  
 console 
 . 
 log 
 ( 
 "Document successfully deleted!" 
 ); 
 }). 
 catch 
 (( 
 error 
 ) 
  
 = 
>  
 { 
  
 console 
 . 
 error 
 ( 
 "Error removing document: " 
 , 
  
 error 
 ); 
 }); 
  
Swift

Use the delete() method:

Note: This product is not available on watchOS and App Clip targets.
 do 
  
 { 
  
 try 
  
 await 
  
 db 
 . 
 collection 
 ( 
 "cities" 
 ). 
 document 
 ( 
 "DC" 
 ). 
 delete 
 () 
  
 print 
 ( 
 "Document successfully removed!" 
 ) 
 } 
  
 catch 
  
 { 
  
 print 
 ( 
 "Error removing document: 
 \( 
 error 
 ) 
 " 
 ) 
 } 
  
Objective-C

Use the deleteDocumentWithCompletion: method:

Note: This product is not available on watchOS and App Clip targets.
 [[[ 
 self 
 . 
 db 
  
 collectionWithPath 
 : 
 @"cities" 
 ] 
  
 documentWithPath 
 : 
 @"DC" 
 ] 
  
 deleteDocumentWithCompletion 
 : 
 ^ 
 ( 
 NSError 
  
 * 
  
 _Nullable 
  
 error 
 ) 
  
 { 
  
 if 
  
 ( 
 error 
  
 != 
  
 nil 
 ) 
  
 { 
  
 NSLog 
 ( 
 @"Error removing document: %@" 
 , 
  
 error 
 ); 
  
 } 
  
 else 
  
 { 
  
 NSLog 
 ( 
 @"Document successfully removed!" 
 ); 
  
 } 
 }]; 
  

Kotlin

Use the delete() method:

 db 
 . 
 collection 
 ( 
 "cities" 
 ). 
 document 
 ( 
 "DC" 
 ) 
  
 . 
 delete 
 () 
  
 . 
 addOnSuccessListener 
  
 { 
  
 Log 
 . 
 d 
 ( 
 TAG 
 , 
  
 "DocumentSnapshot successfully deleted!" 
 ) 
  
 } 
  
 . 
 addOnFailureListener 
  
 { 
  
 e 
  
 - 
>  
 Log 
 . 
 w 
 ( 
 TAG 
 , 
  
 "Error deleting document" 
 , 
  
 e 
 ) 
  
 } 
  

Java

Use the delete() method:

 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

Use the delete() method:

 db 
 . 
 collection 
 ( 
 "cities" 
 ). 
 doc 
 ( 
 "DC" 
 ). 
 delete 
 (). 
 then 
 ( 
  
 ( 
 doc 
 ) 
  
 = 
>  
 print 
 ( 
 "Document deleted" 
 ), 
  
 onError: 
  
 ( 
 e 
 ) 
  
 = 
>  
 print 
 ( 
 "Error updating document 
 $ 
 e 
 " 
 ), 
  
 ); 
  
Java

Use the delete() method:

  // asynchronously delete a document 
 ApiFuture<WriteResult> 
  
 writeResult 
  
 = 
  
 db 
 . 
 collection 
 ( 
 "cities" 
 ). 
 document 
 ( 
 "DC" 
 ). 
 delete 
 (); 
 // ... 
 System 
 . 
 out 
 . 
 println 
 ( 
 "Update time : " 
  
 + 
  
 writeResult 
 . 
 get 
 (). 
 getUpdateTime 
 ()); 
  
 
Python

Use the delete() method:

  db 
 . 
 collection 
 ( 
 "cities" 
 ) 
 . 
 document 
 ( 
 "DC" 
 ) 
 . 
 delete 
 () 
  
 

Python

Use the delete() method:

  await 
 db 
 . 
 collection 
 ( 
 "cities" 
 ) 
 . 
 document 
 ( 
 "DC" 
 ) 
 . 
 delete 
 () 
  
 
C++

Use the Delete() method:

 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

Use the delete() method:

  const 
  
 res 
  
 = 
  
 await 
  
 db 
 . 
 collection 
 ( 
 'cities' 
 ). 
 doc 
 ( 
 'DC' 
 ). 
 delete 
 (); 
  
 
Go

Use the Delete() method:

  import 
  
 ( 
  
 "context" 
  
 "log" 
  
 "cloud.google.com/go/firestore" 
 ) 
 func 
  
 deleteDoc 
 ( 
 ctx 
  
 context 
 . 
 Context 
 , 
  
 client 
  
 * 
 firestore 
 . 
 Client 
 ) 
  
 error 
  
 { 
  
 _ 
 , 
  
 err 
  
 := 
  
 client 
 . 
 Collection 
 ( 
 "cities" 
 ). 
 Doc 
 ( 
 "DC" 
 ). 
 Delete 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 // Handle any errors in an appropriate way, such as returning them. 
  
 log 
 . 
 Printf 
 ( 
 "An error has occurred: %s" 
 , 
  
 err 
 ) 
  
 } 
  
 return 
  
 err 
 } 
  
 
PHP

Use the delete() method:

  $db->collection('samples/php/cities')->document('DC')->delete();  
 
 
Unity

Use the DeleteAsync() method:

 DocumentReference 
  
 cityRef 
  
 = 
  
 db 
 . 
 Collection 
 ( 
 "cities" 
 ). 
 Document 
 ( 
 "DC" 
 ); 
 cityRef 
 . 
 DeleteAsync 
 (); 
C#

Use the DeleteAsync() method:

  DocumentReference 
  
 cityRef 
  
 = 
  
 db 
 . 
 Collection 
 ( 
 "cities" 
 ). 
 Document 
 ( 
 "DC" 
 ); 
 await 
  
 cityRef 
 . 
 DeleteAsync 
 (); 
  
 
Ruby

Use the delete() method:

  city_ref 
  
 = 
  
 firestore 
 . 
 doc 
  
 " 
 #{ 
 collection_path 
 } 
 /DC" 
 city_ref 
 . 
 delete  
 
 . 
 rb 
 

When you delete a document, Cloud Firestore does not automatically delete the documents within its subcollections. You can still access the subcollection documents by reference. For example, you can access the document at path /mycoll/mydoc/mysubcoll/mysubdoc even if you delete the ancestor document at /mycoll/mydoc .

Non-existent ancestor documents appear in the console , but they do not appear in query results and snapshots.

If you want to delete a document and all the documents within its subcollections, you must do so manually. For more information, see Delete Collections .

Delete fields

To delete specific fields from a document, use the following language-specific FieldValue.delete() methods when you update a document:

Web

Use the deleteField() method:

 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

Use the FieldValue.delete() method:

 var 
  
 cityRef 
  
 = 
  
 db 
 . 
 collection 
 ( 
 'cities' 
 ). 
 doc 
 ( 
 'BJ' 
 ); 
 // Remove the 'capital' field from the document 
 var 
  
 removeCapital 
  
 = 
  
 cityRef 
 . 
 update 
 ({ 
  
 capital 
 : 
  
 firebase 
 . 
 firestore 
 . 
 FieldValue 
 . 
 delete 
 () 
 }); 
  
Swift

Use the FieldValue.delete() method:

Note: This product is not available on watchOS and App Clip targets.
 do 
  
 { 
  
 try 
  
 await 
  
 db 
 . 
 collection 
 ( 
 "cities" 
 ). 
 document 
 ( 
 "BJ" 
 ). 
 updateData 
 ([ 
  
 "capital" 
 : 
  
 FieldValue 
 . 
 delete 
 (), 
  
 ]) 
  
 print 
 ( 
 "Document successfully updated" 
 ) 
 } 
  
 catch 
  
 { 
  
 print 
 ( 
 "Error updating document: 
 \( 
 error 
 ) 
 " 
 ) 
 } 
  
Objective-C

Use the fieldValueForDelete: method:

Note: This product is not available on watchOS and App Clip targets.
 [[[ 
 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

Use the FieldValue.delete() method:

 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

Use the FieldValue.delete() method:

 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

Use the FieldValue.delete() method:

 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

Use the FieldValue.delete() method:

  DocumentReference 
  
 docRef 
  
 = 
  
 db 
 . 
 collection 
 ( 
 "cities" 
 ). 
 document 
 ( 
 "BJ" 
 ); 
 Map<String 
 , 
  
 Object 
>  
 updates 
  
 = 
  
 new 
  
 HashMap 
<> (); 
 updates 
 . 
 put 
 ( 
 "capital" 
 , 
  
 FieldValue 
 . 
 delete 
 ()); 
 // Update and delete the "capital" field in the document 
 ApiFuture<WriteResult> 
  
 writeResult 
  
 = 
  
 docRef 
 . 
 update 
 ( 
 updates 
 ); 
 System 
 . 
 out 
 . 
 println 
 ( 
 "Update time : " 
  
 + 
  
 writeResult 
 . 
 get 
 ()); 
  
 
Python

Use the firestore.DELETE_FIELD method:

  city_ref 
 = 
 db 
 . 
 collection 
 ( 
 "cities" 
 ) 
 . 
 document 
 ( 
 "BJ" 
 ) 
 city_ref 
 . 
 update 
 ({ 
 "capital" 
 : 
 firestore 
 . 
 DELETE_FIELD 
 }) 
  
 

Python

Use the firestore.DELETE_FIELD method:

  city_ref 
 = 
 db 
 . 
 collection 
 ( 
 "cities" 
 ) 
 . 
 document 
 ( 
 "BJ" 
 ) 
 await 
 city_ref 
 . 
 update 
 ({ 
 "capital" 
 : 
 firestore 
 . 
 DELETE_FIELD 
 }) 
  
 
C++

Use the FieldValue::Delete() method:

 DocumentReference 
  
 doc_ref 
  
 = 
  
 db 
 - 
> Collection 
 ( 
 "cities" 
 ). 
 Document 
 ( 
 "BJ" 
 ); 
 doc_ref 
 . 
 Update 
 ({{"capital", FieldValue::Delete()}}) 
  
 . 
 OnCompletion 
 ([]( 
 const 
  
 Future<void> 
&  
 future 
 ) 
  
 { 
  
 /*...*/ 
  
 }); 
  
Node.js

Use the FieldValue.delete() method:

  // Create a document reference 
 const 
  
 cityRef 
  
 = 
  
 db 
 . 
 collection 
 ( 
 'cities' 
 ). 
 doc 
 ( 
 'BJ' 
 ); 
 // Remove the 'capital' field from the document 
 const 
  
 res 
  
 = 
  
 await 
  
 cityRef 
 . 
 update 
 ({ 
  
 capital 
 : 
  
 FieldValue 
 . 
 delete 
 () 
 }); 
  
 
Go

Use the firestore.Delete method:

  import 
  
 ( 
  
 "context" 
  
 "log" 
  
 "cloud.google.com/go/firestore" 
 ) 
 func 
  
 deleteField 
 ( 
 ctx 
  
 context 
 . 
 Context 
 , 
  
 client 
  
 * 
 firestore 
 . 
 Client 
 ) 
  
 error 
  
 { 
  
 _ 
 , 
  
 err 
  
 := 
  
 client 
 . 
 Collection 
 ( 
 "cities" 
 ). 
 Doc 
 ( 
 "BJ" 
 ). 
 Update 
 ( 
 ctx 
 , 
  
 [] 
 firestore 
 . 
 Update 
 { 
  
 { 
  
 Path 
 : 
  
 "capital" 
 , 
  
 Value 
 : 
  
 firestore 
 . 
 Delete 
 , 
  
 }, 
  
 }) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 // Handle any errors in an appropriate way, such as returning them. 
  
 log 
 . 
 Printf 
 ( 
 "An error has occurred: %s" 
 , 
  
 err 
 ) 
  
 } 
  
 // ... 
  
 return 
  
 err 
 } 
  
 
PHP

Use the FieldValue::deleteField() method:

  $cityRef = $db->collection('samples/php/cities')->document('BJ'); 
 $cityRef->update([ 
 ['path' => 'capital', 'value' => FieldValue::deleteField()] 
 ]);  
 
 
Unity

Use the FieldValue.Delete method:

 DocumentReference 
  
 cityRef 
  
 = 
  
 db 
 . 
 Collection 
 ( 
 "cities" 
 ). 
 Document 
 ( 
 "BJ" 
 ); 
 Dictionary<string 
 , 
  
 object 
>  
 updates 
  
 = 
  
 new 
  
 Dictionary<string 
 , 
  
 object 
> { 
  
 { 
  
 "Capital" 
 , 
  
 FieldValue 
 . 
 Delete 
  
 } 
 }; 
C#

Use the FieldValue.Delete method:

  DocumentReference 
  
 cityRef 
  
 = 
  
 db 
 . 
 Collection 
 ( 
 "cities" 
 ). 
 Document 
 ( 
 "BJ" 
 ); 
 Dictionary<string 
 , 
  
 object 
>  
 updates 
  
 = 
  
 new 
  
 Dictionary<string 
 , 
  
 object 
> { 
  
 { 
  
 "Capital" 
 , 
  
 FieldValue 
 . 
 Delete 
  
 } 
 }; 
 await 
  
 cityRef 
 . 
 UpdateAsync 
 ( 
 updates 
 ); 
  
 
Ruby

Use the firestore.field_delete method:

  city_ref 
  
 = 
  
 firestore 
 . 
 doc 
  
 " 
 #{ 
 collection_path 
 } 
 /BJ" 
 city_ref 
 . 
 update 
 ({ 
  
 capital 
 : 
  
 firestore 
 . 
 field_delete 
  
 }) 
  
 

Delete collections

To delete an entire collection or subcollection in Cloud Firestore , retrieve (read) all the documents within the collection or subcollection and delete them. This process incurs both read and delete costs. If you have larger collections, you may want to delete the documents in smaller batches to avoid out-of-memory errors. Repeat the process until you've deleted the entire collection or subcollection.

Deleting a collection requires coordinating an unbounded number of individual delete requests. If you need to delete entire collections, do so only from a trusted server environment. While it is possible to delete a collection from a mobile/web client, doing so has negative security and performance implications.

The snippets below are somewhat simplified and do not deal with error handling, security, deleting subcollections, or maximizing performance. To learn more about one recommended approach to deleting collections in production, see Deleting Collections and Subcollections .

Web
 // Deleting collections from a Web client is not recommended. 
Swift
Note: This product is not available on watchOS and App Clip targets.
 // Deleting collections from an Apple client is not recommended. 
Objective-C
Note: This product is not available on watchOS and App Clip targets.
 // 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

Deleting collections from the client is not recommended.

Java
  /** 
 * Delete a collection in batches to avoid out-of-memory errors. Batch size may be tuned based on 
 * document size (atmost 1MB) and application requirements. 
 */ 
 void 
  
 deleteCollection 
 ( 
 CollectionReference 
  
 collection 
 , 
  
 int 
  
 batchSize 
 ) 
  
 { 
  
 try 
  
 { 
  
 // retrieve a small batch of documents to avoid out-of-memory errors 
  
 ApiFuture<QuerySnapshot> 
  
 future 
  
 = 
  
 collection 
 . 
 limit 
 ( 
 batchSize 
 ). 
 get 
 (); 
  
 int 
  
 deleted 
  
 = 
  
 0 
 ; 
  
 // future.get() blocks on document retrieval 
  
 List<QueryDocumentSnapshot> 
  
 documents 
  
 = 
  
 future 
 . 
 get 
 (). 
 getDocuments 
 (); 
  
 for 
  
 ( 
 QueryDocumentSnapshot 
  
 document 
  
 : 
  
 documents 
 ) 
  
 { 
  
 document 
 . 
 getReference 
 (). 
 delete 
 (); 
  
 ++ 
 deleted 
 ; 
  
 } 
  
 if 
  
 ( 
 deleted 
  
> = 
  
 batchSize 
 ) 
  
 { 
  
 // retrieve and delete another batch 
  
 deleteCollection 
 ( 
 collection 
 , 
  
 batchSize 
 ); 
  
 } 
  
 } 
  
 catch 
  
 ( 
 Exception 
  
 e 
 ) 
  
 { 
  
 System 
 . 
 err 
 . 
 println 
 ( 
 "Error deleting collection : " 
  
 + 
  
 e 
 . 
 getMessage 
 ()); 
  
 } 
 } 
  
 
Python
  def 
  
 delete_collection 
 ( 
 coll_ref 
 , 
 batch_size 
 ): 
 if 
 batch_size 
 == 
 0 
 : 
 return 
 docs 
 = 
 coll_ref 
 . 
 list_documents 
 ( 
 page_size 
 = 
 batch_size 
 ) 
 deleted 
 = 
 0 
 for 
 doc 
 in 
 docs 
 : 
 print 
 ( 
 f 
 "Deleting doc 
 { 
 doc 
 . 
 id 
 } 
 => 
 { 
 doc 
 . 
 get 
 () 
 . 
 to_dict 
 () 
 } 
 " 
 ) 
 doc 
 . 
 delete 
 () 
 deleted 
 = 
 deleted 
 + 
 1 
 if 
 deleted 
> = 
 batch_size 
 : 
 return 
 delete_collection 
 ( 
 coll_ref 
 , 
 batch_size 
 ) 
  
 

Python

  async 
 def 
  
 delete_collection 
 ( 
 coll_ref 
 , 
 batch_size 
 ): 
 docs 
 = 
 coll_ref 
 . 
 limit 
 ( 
 batch_size 
 ) 
 . 
 stream 
 () 
 deleted 
 = 
 0 
 async 
 for 
 doc 
 in 
 docs 
 : 
 print 
 ( 
 f 
 "Deleting doc 
 { 
 doc 
 . 
 id 
 } 
 => 
 { 
 doc 
 . 
 to_dict 
 () 
 } 
 " 
 ) 
 await 
 doc 
 . 
 reference 
 . 
 delete 
 () 
 deleted 
 = 
 deleted 
 + 
 1 
 if 
 deleted 
> = 
 batch_size 
 : 
 return 
 delete_collection 
 ( 
 coll_ref 
 , 
 batch_size 
 ) 
  
 
C++
 // This is not supported. Delete data using CLI as discussed below. 
  
Node.js
  async 
  
 function 
  
 deleteCollection 
 ( 
 db 
 , 
  
 collectionPath 
 , 
  
 batchSize 
 ) 
  
 { 
  
 const 
  
 collectionRef 
  
 = 
  
 db 
 . 
 collection 
 ( 
 collectionPath 
 ); 
  
 const 
  
 query 
  
 = 
  
 collectionRef 
 . 
 orderBy 
 ( 
 '__name__' 
 ). 
 limit 
 ( 
 batchSize 
 ); 
  
 return 
  
 new 
  
 Promise 
 (( 
 resolve 
 , 
  
 reject 
 ) 
  
 = 
>  
 { 
  
 deleteQueryBatch 
 ( 
 db 
 , 
  
 query 
 , 
  
 resolve 
 ). 
 catch 
 ( 
 reject 
 ); 
  
 }); 
 } 
 async 
  
 function 
  
 deleteQueryBatch 
 ( 
 db 
 , 
  
 query 
 , 
  
 resolve 
 ) 
  
 { 
  
 const 
  
 snapshot 
  
 = 
  
 await 
  
 query 
 . 
 get 
 (); 
  
 const 
  
 batchSize 
  
 = 
  
 snapshot 
 . 
 size 
 ; 
  
 if 
  
 ( 
 batchSize 
  
 === 
  
 0 
 ) 
  
 { 
  
 // When there are no documents left, we are done 
  
 resolve 
 (); 
  
 return 
 ; 
  
 } 
  
 // Delete documents in a batch 
  
 const 
  
 batch 
  
 = 
  
 db 
 . 
 batch 
 (); 
  
 snapshot 
 . 
 docs 
 . 
 forEach 
 (( 
 doc 
 ) 
  
 = 
>  
 { 
  
 batch 
 . 
 delete 
 ( 
 doc 
 . 
 ref 
 ); 
  
 }); 
  
 await 
  
 batch 
 . 
 commit 
 (); 
  
 // Recurse on the next process tick, to avoid 
  
 // exploding the stack. 
  
 process 
 . 
 nextTick 
 (() 
  
 = 
>  
 { 
  
 deleteQueryBatch 
 ( 
 db 
 , 
  
 query 
 , 
  
 resolve 
 ); 
  
 }); 
 } 
  
 
Go
  import 
  
 ( 
  
 "context" 
  
 "fmt" 
  
 "io" 
  
 "cloud.google.com/go/firestore" 
  
 "google.golang.org/api/iterator" 
 ) 
 func 
  
 deleteCollection 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
 , 
  
 collectionName 
  
 string 
 , 
  
 batchSize 
  
 int 
 ) 
  
 error 
  
 { 
  
 // Instantiate a client 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 client 
 , 
  
 err 
  
 := 
  
 firestore 
 . 
 NewClient 
 ( 
 ctx 
 , 
  
 projectID 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 err 
  
 } 
  
 col 
  
 := 
  
 client 
 . 
 Collection 
 ( 
 collectionName 
 ) 
  
 bulkwriter 
  
 := 
  
 client 
 . 
 BulkWriter 
 ( 
 ctx 
 ) 
  
 for 
  
 { 
  
 // Get a batch of documents 
  
 iter 
  
 := 
  
 col 
 . 
 Limit 
 ( 
 batchSize 
 ). 
 Documents 
 ( 
 ctx 
 ) 
  
 numDeleted 
  
 := 
  
 0 
  
 // Iterate through the documents, adding 
  
 // a delete operation for each one to the BulkWriter. 
  
 for 
  
 { 
  
 doc 
 , 
  
 err 
  
 := 
  
 iter 
 . 
 Next 
 () 
  
 if 
  
 err 
  
 == 
  
 iterator 
 . 
 Done 
  
 { 
  
 break 
  
 } 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 err 
  
 } 
  
 bulkwriter 
 . 
 Delete 
 ( 
 doc 
 . 
 Ref 
 ) 
  
 numDeleted 
 ++ 
  
 } 
  
 // If there are no documents to delete, 
  
 // the process is over. 
  
 if 
  
 numDeleted 
  
 == 
  
 0 
  
 { 
  
 bulkwriter 
 . 
 End 
 () 
  
 break 
  
 } 
  
 bulkwriter 
 . 
 Flush 
 () 
  
 } 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "Deleted collection \"%s\"" 
 , 
  
 collectionName 
 ) 
  
 return 
  
 nil 
 } 
  
 
PHP
  function data_delete_collection(string $projectId, string $collectionName, int $batchSize) 
 { 
 // Create the Cloud Firestore client 
 $db = new FirestoreClient([ 
 'projectId' => $projectId, 
 ]); 
 $collectionReference = $db->collection($collectionName); 
 $documents = $collectionReference->limit($batchSize)->documents(); 
 while (!$documents->isEmpty()) { 
 foreach ($documents as $document) { 
 printf('Deleting document %s' . PHP_EOL, $document->id()); 
 $document->reference()->delete(); 
 } 
 $documents = $collectionReference->limit($batchSize)->documents(); 
 } 
 }  
 
 
Unity
 // This is not supported. Delete data using CLI as discussed below. 
C#
  private 
  
 static 
  
 async 
  
 Task 
  
 DeleteCollection 
 ( 
 CollectionReference 
  
 collectionReference 
 , 
  
 int 
  
 batchSize 
 ) 
 { 
  
 QuerySnapshot 
  
 snapshot 
  
 = 
  
 await 
  
 collectionReference 
 . 
 Limit 
 ( 
 batchSize 
 ). 
 GetSnapshotAsync 
 (); 
  
 IReadOnlyList<DocumentSnapshot> 
  
 documents 
  
 = 
  
 snapshot 
 . 
 Documents 
 ; 
  
 while 
  
 ( 
 documents 
 . 
 Count 
 > 
 0 
 ) 
  
 { 
  
 foreach 
  
 ( 
 DocumentSnapshot 
  
 document 
  
 in 
  
 documents 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "Deleting document {0}" 
 , 
  
 document 
 . 
 Id 
 ); 
  
 await 
  
 document 
 . 
 Reference 
 . 
 DeleteAsync 
 (); 
  
 } 
  
 snapshot 
  
 = 
  
 await 
  
 collectionReference 
 . 
 Limit 
 ( 
 batchSize 
 ). 
 GetSnapshotAsync 
 (); 
  
 documents 
  
 = 
  
 snapshot 
 . 
 Documents 
 ; 
  
 } 
  
 Console 
 . 
 WriteLine 
 ( 
 "Finished deleting all documents from the collection." 
 ); 
 } 
  
 
Ruby
  cities_ref 
  
 = 
  
 firestore 
 . 
 col 
  
 collection_path 
 query 
  
 = 
  
 cities_ref 
 query 
 . 
 get 
  
 do 
  
 | 
 document_snapshot 
 | 
  
 puts 
  
 "Deleting document 
 #{ 
 document_snapshot 
 . 
 document_id 
 } 
 ." 
  
 document_ref 
  
 = 
  
 document_snapshot 
 . 
 ref 
  
 document_ref 
 . 
 delete 
 end  
 
 . 
 rb 
 

Delete data with the Firebase CLI

You can also use the Firebase CLI to delete documents and collections. Use the following command to delete data:

  firebase 
  
 firestore 
 : 
 delete 
  
 [ 
 options 
 ] 
  
<< path 
>> 

Delete data with the console

You can delete documents and collections from the Cloud Firestore page in the console . Deleting a document from the console deletes all of the nested data in that document, including any subcollections.

Delete data with TTL policies

A TTL policy designates a given field as the expiration time for documents in a given collection group. TTL delete operations count towards your document delete costs.

For information about setting TTL, see Manage data retention with TTL policies .

For more information on error codes and how to resolve latency issues when deleting data check out the troubleshooting page .

Delete data with Dataflow

Dataflow is a great tool for bulk operations on your Firestore database. The Firestore connector for Dataflow introduction blog post has an example of deleting all documents in a collection group.

Use managed bulk delete

Cloud Firestore supports bulk deleting one or more collection groups. For more information, see Bulk delete data .

Create a Mobile Website
View Site in Mobile | Classic
Share by: