Mongoose.js: supprimer collection ou DB

Est-il possible de supprimer une collection ou une base de données entière en utilisant mongoose.js?

30
demandé sur WHITECOLOR 2012-07-12 18:05:43

5 réponses

Oui, bien que vous le fassiez via le pilote MongoDB natif et non Mongoose lui-même. En supposant un besoin, connecté, mongoose variable, le natif de Db l'objet est accessible via mongoose.connection.db, et que cet objet fournit dropCollection et dropDatabase des méthodes.

// Drop the 'foo' collection from the current database
mongoose.connection.db.dropCollection('foo', function(err, result) {...});

// Drop the current database
mongoose.connection.db.dropDatabase(function(err, result) {...});
56
répondu JohnnyHK 2014-12-22 22:40:59

Cela peut maintenant être fait en Mangouste.

MyModel.collection.drop();

Chapeau pointe: https://github.com/Automattic/mongoose/issues/4511

34
répondu David L. Walsh 2017-01-28 06:21:00

Pour ceux qui utilisent le framework de test mochajs et qui veulent nettoyer toutes les collections de base de données après chaque test, vous pouvez utiliser ce qui suit qui utilise async / await:

afterEach(async function () {
  const collections = await mongoose.connection.db.collections()

  for (let collection of collections) {
    await collection.remove()
  }
})
3
répondu adamc 2018-04-28 01:28:28

Mongoose fait référence à la connexion sur chaque modèle. Ainsi, vous pouvez trouver utile de supprimer également la base de données ou la collection d'un modèle individuel.

Par exemple:

// Drop the 'foo' collection from the current database
User.db.db.dropCollection('foo', function(err, result) {...});

// Drop the current database
User.db.db.dropDatabase(function(err, result) {...});
1
répondu Huston Hedinger 2015-10-20 21:58:47

Pour la version 5.2.15 de Mongoose + Mocha teste l'utilisation où vous devez supprimer toutes les collections avant chaque test.

beforeEach(async () => {
     const collections = await mongoose.connection.db.collections();

     for (let collection of collections) {
          // note: collection.remove() has been depreceated.        
          await collection.deleteOne(); 
     }
});
0
répondu Durja Arai 2018-09-16 07:53:44