Deleting all documents in Firestore collection

2020-01-27 04:31发布

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.

Thanks!

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)
  }
}

}

3条回答
仙女界的扛把子
2楼-- · 2020-01-27 05:09

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 documentation for the Firebase CLI seems to hint that it's possible to delete an entire collection with a single command, but I haven't tried this myself. If this would suit your needs, I recommend you check out the (sparse) documentation for the firestore:delete command.

查看更多
劫难
3楼-- · 2020-01-27 05:12

The following javascript function will delete any collection:

deleteCollection(path) {
    firebase.firestore().collection(path).listDocuments().then(val => {
        val.map((val) => {
            val.delete()
        })
    })
}

This works by iterating through every document and deleting each.

Alternatively, you can make use of Firestore's batch commands and delete all at once using the following function:

deleteCollection(path) {
    // Get a new write batch
    var batch = firebase.firestore().batch()

    firebase.firestore().collection(path).listDocuments().then(val => {
        val.map((val) => {
            batch.delete(val)
        })

        batch.commit()
    })
}
查看更多
放荡不羁爱自由
4楼-- · 2020-01-27 05:21

There is now an option in the firebase CLI to delete an entire firestore database:

firebase firestore:delete --all-collections
查看更多
登录 后发表回答