120 votes

déposer la base de données avec la mangouste

Je prépare un script de création de base de données dans node.js + mongoose. Comment puis-je vérifier si la base de données existe déjà et, le cas échéant, la supprimer (supprimer) à l'aide de mangouste? Je ne pouvais pas trouver un moyen de tomber avec la mangouste.

177voto

drinchev Points 5916

Il n'y a pas de méthode pour supprimer une collection de mangouste, le mieux que vous puissiez faire est de supprimer le contenu de l'une d'entre elles:

 Model.remove({}, function(err) { 
   console.log('collection removed') 
});
 

Mais il existe un moyen d’accéder au pilote javascript natif de mongodb, qui peut être utilisé pour cela.

 mongoose.connection.collections['collectionName'].drop( function(err) {
    console.log('collection dropped');
});
 

Attention

Faites une sauvegarde avant d'essayer ceci au cas où quelque chose se passe mal!

99voto

hellslam Points 648

Mongoose créera une base de données s'il n'y en a pas déjà une sur la connexion. Ainsi, une fois la connexion établie, vous pouvez simplement l'interroger pour voir s'il contient quelque chose.

Vous pouvez supprimer n'importe quelle base de données à laquelle vous êtes connecté:

 var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/mydatabase');
// create or connect to mydatabase

// drop mydatabase
mongoose.connection.db.dropDatabase();
// mydatabase has been dropped
 

17voto

silverfighter Points 2607

Si vous modifiez la solution de @ hellslam comme ceci, alors cela fonctionnera

J'utilise cette technique pour supprimer la base de données après mes tests d'intégration

 //CoffeeScript
mongoose = require "mongoose"
conn = mongoose.connect("mongodb://localhost/mydb")

conn.connection.db.dropDatabase()

//JavaScript
var conn, mongoose;
mongoose = require("mongoose");
conn = mongoose.connect("mongodb://localhost/mydb");

conn.connection.db.dropDatabase();
 

HTH au moins ça l’a fait pour moi, alors j’ai décidé de partager =)

5voto

Eric Caron Points 1797

La difficulté que j'ai eu avec les autres solutions, c'est qu'ils s'appuient sur le redémarrage de votre application si vous voulez obtenir les indices de travailler à nouveau.

Pour mes besoins (c'est à dire d'être capable d'exécuter un test de l'unité de la nukes toutes les collections, puis recrée avec leurs index), j'ai fini la mise en œuvre de cette solution:

Ceci repose sur la underscore.js et async.js les bibliothèques pour assembler les indices en parallèles, il pourrait se renverser si vous êtes contre cette bibliothèque, mais je laisse cela comme un exerciseur pour le développeur.

mongoose.connection.db.executeDbCommand( {dropDatabase:1}, function(err, result) {
  var mongoPath = mongoose.connections[0].host + ':' + mongoose.connections[0].port + '/' + mongoose.connections[0].name
  //Kill the current connection, then re-establish it
  mongoose.connection.close()
  mongoose.connect('mongodb://' + mongoPath, function(err){
    var asyncFunctions = []

    //Loop through all the known schemas, and execute an ensureIndex to make sure we're clean
    _.each(mongoose.connections[0].base.modelSchemas, function(schema, key) {
      asyncFunctions.push(function(cb){
        mongoose.model(key, schema).ensureIndexes(function(){
          return cb()
        })
      })
    })

    async.parallel(asyncFunctions, function(err) {
      console.log('Done dumping all collections and recreating indexes')
    })
  })
})

4voto

Danish Points 113

Pour vider une collection particulière dans une base de données:

 model.remove(function(err, p){
    if(err){ 
        throw err;
    } else{
        console.log('No Of Documents deleted:' + p);
    }
});
 

Remarque:

  1. Choisissez un modèle faisant référence à un schéma particulier (schéma de la collection que vous souhaitez supprimer).
  2. Cette opération ne supprimera pas le nom de la collection de la base de données.
  3. Cela supprime tous les documents d'une collection.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X