Il modo migliore per inserire il database in Mongoose dipende dalla versione di Mongoose che stai utilizzando. Se stai utilizzando una versione di Mongoose 4.6.4 o successiva, è probabile che questo metodo aggiunto in quella versione funzionerà bene per te:
mongoose.connection.dropDatabase();
Nelle versioni precedenti questo metodo non esisteva. Invece, dovevi usare una chiamata MongoDB diretta:
mongoose.connection.db.dropDatabase();
Tuttavia, se questo è stato eseguito subito dopo la creazione della connessione al database, potrebbe non riuscire silenziosamente. Ciò è correlato alla connessione effettivamente asincrona e non ancora configurata quando viene eseguito il comando. Questo normalmente non è un problema per altre chiamate Mongoose come.find() , che si accodano fino a quando la connessione non è aperta e quindi vengono eseguite.
Se guardi il codice sorgente di dropDatabase() collegamento che è stato aggiunto, puoi vedere che è stato progettato per risolvere esattamente questo problema. Verifica se la connessione è aperta e pronta. In tal caso, attiva immediatamente il comando. In caso contrario, registra il comando da eseguire quando la connessione al database è stata aperta.
Alcuni dei suggerimenti precedenti consigliano di inserire sempre il dropDatabasecomando nel opengestore. Ma ciò funziona solo nel caso in cui la connessione non sia ancora aperta.
Connection.prototype.dropDatabase = function(callback) {
var Promise = PromiseProvider.get();
var _this = this;
var promise = new Promise.ES6(function(resolve, reject) {
if (_this.readyState !== STATES.connected) {
_this.on('open', function() {
_this.db.dropDatabase(function(error) {
if (error) {
reject(error);
} else {
resolve();
}
});
});
} else {
_this.db.dropDatabase(function(error) {
if (error) {
reject(error);
} else {
resolve();
}
});
}
});
if (callback) {
promise.then(function() { callback(); }, callback);
}
return promise;
};
Ecco una versione semplice della logica precedente che può essere utilizzata con le versioni precedenti di Mongoose:
// This shim is backported from Mongoose 4.6.4 to reliably drop a database
// http://stackoverflow.com/a/42860208/254318
// The first arg should be "mongoose.connection"
function dropDatabase (connection, callback) {
// readyState 1 === 'connected'
if (connection.readyState !== 1) {
connection.on('open', function() {
connection.db.dropDatabase(callback);
});
} else {
connection.db.dropDatabase(callback);
}
}