En raison d'une erreur dans le code client, mongodb a créé de nombreuses collections "mr.mapreduce ....", comment les supprimer toutes (par masque peut-être).MongoDB remove mapreduce collection
Répondre
I exécuter le script en shell interactif:
function f() {
var names = db.getCollectionNames();
for(var i = 0; i < names.length; i++){
if(names[i].indexOf("mr.") == 0){
db[names[i]].drop();}}};
f();
Il est résolu mon problème.
table carte-reduce temporaire doit être nettoyé lorsque la connexion qui les a créés est fermé:
map/reduce est invoquée par une commande de base de données . La base de données crée une collection temporaire pour contenir la sortie de l'opération. La collection est nettoyée lorsque la connexion cliente se ferme ou lorsqu'elle est explicitement supprimée. Vous pouvez également spécifier un nom de collection de sortie permanente . carte et réduire les fonctions sont écrites en JavaScript et exécuter sur le serveur.
Sinon, vous pouvez les supprimer en utilisant les même méthode supprimerait toute autre collection. Cela pourrait devenir un peu répétitif.
Une autre façon de réaliser la même chose est cet extrait:
db.system.namespaces.find({name: /tmp.mr/}).forEach(function(z) {
try{
db.getMongo().getCollection(z.name).drop();
} catch(err) {}
});
Pro: Il ne sera pas essayer de rassembler tous vos espaces de noms dans un tableau JavaScript. MongoDB segfaults sur trop d'espaces de noms.
copié le même code, mais n'a pas fonctionné pour moi :(EDIT: le nom était différent.Cela fonctionne maintenant.Merci – theTuxRacer
Bonne idée.Vous pourriez vouloir résoudre la cause du problème à long terme cependant. Créer (et quitter) une charge de collections temporaires pour le nettoyage manuel n'est probablement pas idéal –
Vous devriez écrire> if (noms [i] .indexOf ("tmp.mr.") == 0) {