web-dev-qa-db-fra.com

Comment supprimer plusieurs enregistrements sélectionnés dans une collection dans MongoDB à l'aide de la boussole MongoDB

Je suis très nouveau sur MongoDB et MongoDB Compass.

J'ai environ 1000 enregistrements dans une collection de clients. Comment puis-je supprimer tous les enregistrements à la fois via la boussole MongoDB.

Merci beaucoup,

6
anil

Si vous n'avez pas d'index sur cette collection, vous pouvez simplement supprimer la collection entière comme indiqué dans le docs .

Si vous avez des index, cependant, supprimer la collection supprimera également les index, mais il est généralement beaucoup plus rapide de supprimer le tout, puis de recréer la collection et les index que de supprimer tous les documents à l'aide de remove (db.collection.remove({})), car cela devrait aller document par document en libérant l'espace qu'ils prennent et en supprimant leur entrée sur les index, le cas échéant.

La seule mise en garde de cette approche est que dans un cluster fragmenté, vous pouvez supprimer une collection et, même si la suppression est signalée comme réussie, la collection peut toujours être présente dans certains nœuds, provoquant des problèmes lors de la recréation.

Vous pouvez en savoir plus sur ce problème encore de OPEN et sa solution de contournement sur https://jira.mongodb.org/browse/SERVER-17397 :

RÉSUMÉ DU NUMÉRO

Lors de la suppression d'une base de données/collection dans un cluster fragmenté, même si la suppression est signalée comme réussie, il est possible que la base de données/collection soit toujours présente dans certains nœuds du cluster. Pour le moment, nous déconseillons aux utilisateurs de supprimer une base de données ou une collection, puis de réutiliser l'espace de noms.

IMPACT UTILISATEUR

Lorsque la base de données/collection n'est pas supprimée avec succès dans un nœud donné, les fichiers correspondants continuent d'utiliser l'espace disque dans ce nœud. Tenter de réutiliser l'espace de noms peut conduire à un comportement non défini.

[~ # ~] solutions de contournement [~ # ~]

Pour contourner ce problème, vous pouvez suivre les étapes ci-dessous pour supprimer une base de données/collection dans un environnement fragmenté:

  1. Supprimez la base de données/collection à l'aide d'un mongos.
  2. Connectez-vous au principal de chaque fragment et vérifiez que l'espace de noms a été supprimé. Si ce n'est pas le cas, veuillez le laisser tomber. La suppression d'une base de données (par exemple db.dropDatabase()) supprime les fichiers de données sur le disque pour la base de données en cours de suppression.
  3. Connectez-vous à un mongos, basculez vers la base de données config et supprimez toute référence à l'espace de noms supprimé des collections chunks, locks, databases et collections:

    Lors de la suppression d'une base de données:

     utilisez config 
     db.collections.remove ({_id: /^DATABASE\./}) 
     db.databases.remove ({_id: "DATABASE"}) 
     db.chunks.remove ({ns: /^DATABASE\./}) 
     db.locks.remove ({_id: /^DATABASE\./}) 
    

    Lors de la suppression d'une collection:

     utilisez config 
     db.collections.remove ({_id: "DATABASE.COLLECTION"}) 
     db.chunks.remove ({ns: "DATABASE.COLLECTION"}) 
     db.locks.remove ({_id: "DATABASE.COLLECTION"}) 
    
  4. Connectez-vous à chaque mongos et exécutez flushRouterConfig .

2
Danziger