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?
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) {...});
Cela peut maintenant être fait en Mangouste.
MyModel.collection.drop();
Chapeau pointe: https://github.com/Automattic/mongoose/issues/4511
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()
}
})
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) {...});
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();
}
});