web-dev-qa-db-fra.com

Suppression de tous les documents de la collection Firestore

Je cherche un moyen d'effacer une collection entière. J'ai vu qu'il existe une option de mise à jour par lots, mais cela m'obligerait à connaître tous les ID de document de la collection.

Je cherche un moyen de supprimer simplement tous les documents de la collection.

Merci!

Modifier: la réponse ci-dessous est correcte, j'ai utilisé ce qui suit:

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

}

11
Jake

Il n'y a pas d'API pour supprimer une collection entière (ou son contenu) en une seule fois.

De la documentation Firestore :

Pour supprimer une collection ou une sous-collection entière dans Cloud Firestore, récupérez tous les documents de la collection ou de la sous-collection et supprimez-les. Si vous avez des collections plus importantes, vous souhaiterez peut-être supprimer les documents en lots plus petits pour éviter les erreurs de mémoire insuffisante. Répétez le processus jusqu'à ce que vous ayez supprimé l'intégralité de la collection ou de la sous-collection.

Il y a même un Swift échantillon dans cette documentation, donc je vous recommande de l'essayer.

La documentation de l'interface CLI Firebase semble indiquer qu'il est possible de supprimer une collection entière avec une seule commande, mais je n'ai pas essayé cela moi-même. Si cela convient à vos besoins, je vous recommande de consulter le (clairsemé) documentation pour le firestore:delete commande .

4
Frank van Puffelen

Il y a maintenant une option dans la CLI Firebase pour supprimer une base de données Firestore entière:

firebase firestore:delete --all-collections
9
Kebabman

La fonction javascript suivante supprimera toute collection:

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

Cela fonctionne en itérant dans chaque document et en les supprimant.

Alternativement, vous pouvez utiliser les commandes batch de Firestore et supprimer tout à la fois en utilisant la fonction suivante:

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()
    })
}
8
Áron Géczy