Удаление всех документов в коллекции 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()
})
}