我正在尝试使用mongoose删除整个数据库。我在这里试过this回答,但它只建议删除个别收藏,而不是实际回答问题。
我尝试制作一个示例javascript以查看错误:
var url = 'mongodb://localhost:27017/ngl_dev'
var mongoose = require('mongoose');
mongoose.connect(url);
// Trying to drop the entire database, doesn't work
/*
mongoose.connections[0].db.dropDatabase(function(err){
if(err){
console.log(err);
}
console.log("Database dropped");
});
*/
// But dropping individual collections does.
/*
mongoose.connections[0].collections.TestTypes.drop(function(err){
if(err){
console.log(err);
}
console.log('Collection dropped');
});
*/
// I can drop the entire database using mongodb module, but I don't have
// access to it in my production code, so this is just an example.
/*
var mongo = require('mongodb').MongoClient;
mongo.connect(url, function(err, db){
if(err){
console.log(err);
}
console.log('Connected to the server');
db.dropDatabase();
console.log('Dropped database');
db.close();
});
*/
当我取消注释第一部分时,没有任何反应,脚本挂起,集合中的所有数据和集合本身仍然存在,这与我在运行该函数时所期望的相反。
当我取消注释第二部分时,我收到错误,说集合TestType
未定义,我认为这是有意义的,因为我没有使用应用程序中提供的mongoose模式。因此,当我运行相同的代码并需要正确的模式时,collection dropped
将被打印到控制台,指定集合中的数据将被删除,但集合本身仍然存在且脚本挂起。
当我取消注释第三部分时,指定的数据库实际上被删除了,这是我期望第一部分代码发生的事情。但是,此脚本在生产代码的不同部分中运行,该部分无法直接访问mongodb
模块,因此这只是一个示例,表明mongoose无法正常工作。
如何让mongoose使用dropDatabase()
函数删除整个数据库?
基本上我要做的是将一个使用mongo shell的bash脚本替换为跨平台的东西。
答案 0 :(得分:-2)
你不能像你想的那样做,但你可以
for (var collection in mongoose.connection.collections){
collection.drop( function(err) {
console.log('collection dropped');
});
}