不能通过mongoose删除mongo数据库

时间:2016-03-16 17:12:11

标签: mongodb mongoose

我正在尝试使用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脚本替换为跨平台的东西。

1 个答案:

答案 0 :(得分:-2)

你不能像你想的那样做,但你可以

for (var collection in mongoose.connection.collections){
    collection.drop( function(err) {
        console.log('collection dropped');
    });
}