Search code examples
swiftgoogle-cloud-firestore

Deleting all documents in Firestore collection


I'm looking for a way to clear an entire collection. I saw that there is a batch update option, but that would require me to know all of the document IDs in the collection.

I'm looking for a way to simply delete every document in the collection.

Edit: Answer below is correct, I used the following:

func delete(collection: CollectionReference, batchSize: Int = 100) {
    // Limit query to avoid out-of-memory errors on large collections.
    // When deleting a collection guaranteed to fit in memory, 
    // batching can be avoided entirely.
    collection.limit(to: batchSize).getDocuments { (docset, error) in
        // An error occurred.
        let docset = docset
        let batch = collection.firestore.batch()
        docset?.documents.forEach {
            batch.deleteDocument($0.reference)
        }
        batch.commit {_ in
            self.delete(collection: collection, batchSize: batchSize)
        }
    }
}

Solution

  • There is no API to delete an entire collection (or its contents) in one go.

    From the Firestore documentation:

    To delete an entire collection or subcollection in Cloud Firestore, retrieve all the documents within the collection or subcollection and delete them. 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.

    There is even a Swift sample in that documentation, so I recommend you try it.

    The Firebase CLI allows you to delete an entire collection with a single command, but it just calls the API to delete all documents in that collection in batches. If this suits your needs, I recommend you check out the (sparse) documentation for the firestore:delete command.