Удаление всех документов в коллекции Firestore

Я ищу способ очистить всю коллекцию. Я видел, что есть пакетное обновление, но это потребует, чтобы я знал все идентификаторы документов в коллекции.

Я ищу способ просто удалить каждый документ в коллекции.

Спасибо!

Изменение: ответ ниже, я использовал следующее:

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

}

Ответ 1

Нет API для удаления всей коллекции (или ее содержимого) за один раз.

Из документации Firestore:

Чтобы удалить всю коллекцию или подколлекцию в Cloud Firestore, извлеките все документы в коллекции или подмножество и удалите их. Если у вас есть большие коллекции, вы можете удалить документы меньшими партиями, чтобы избежать ошибок в памяти. Повторите этот процесс, пока вы не удалите всю коллекцию или субколлекцию.

В этой документации есть даже образец Swift, поэтому я рекомендую вам попробовать его.

Документация для CLI Firebase, похоже, намекает на то, что можно удалить всю коллекцию с помощью одной команды, но я не пробовал это сам. Если это будет соответствовать вашим потребностям, я рекомендую вам проверить (разреженную) документацию для команды firestore:delete.

Ответ 2

Теперь в CLI Firebase есть возможность удалить всю базу данных Firestore:

firebase firestore:delete --all-collections

Ответ 3

Следующая функция javascript удалит любую коллекцию:

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

Это работает путем перебора каждого документа и удаления каждого.

Кроме того, вы можете использовать пакетные команды Firestore и удалить все сразу, используя следующую функцию:

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