使用Node JS驱动程序删除多个Mongo数据库

时间:2016-01-04 03:54:55

标签: javascript node.js mongodb

我可以使用Node JS Driver Db class Method dropDatabase来删除数据库。

但问题是,我必须先将数据库连接到数据库,然后按如下方式删除:

var MongoClient = require('mongodb').MongoClient;
var databaseName = 'myMongoDatabaseName'
var connStr = 'mongodb://localhost:27017/' + databaseName;

MongoClient.connect(connStr, function(err, db) {
    // Let's drop the database
    db.dropDatabase(function(err, result) {  
        console.dir('we dropped the database ');
    });
    db.close();
});

我能够列出MongoDb中的所有数据库,只需连接到root,如下所示:

var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/', function(err, db) {
    db.admin().listDatabases().then(function(dbs) {
        // Grab the databases
        dbs = dbs.databases;
        for(var i = 0; i < dbs.length; i++) {
            console.dir(dbs[i].name);
        }
        db.close();
    });
});         

我的问题是,如果我有10个数据库,那么每次我必须连接到数据库并删除它(重复10个数据库)?

他们是这样的,连接到root(没有指定任何数据库名称)并使用特定的数据库名称删除数据库?

1 个答案:

答案 0 :(得分:1)

您可以使用 Db() 构造函数使用名称创建数据库实例,连接到该实例并调用实例 dropDatabase() 方法,这一切都在循环中完成。可以用这个概念来描述 类似下面的实现(警告:未经测试!):

var mongodb = require('mongodb'),
    MongoClient = mongodb.MongoClient,
    server = new mongodb.Server("127.0.0.1", 27017),
    url = 'mongodb://localhost:27017/';

var dropAllDatabases = function (callback) {
    MongoClient.connect(url, function(err, db) {
        if(err) callback(err);
        db.admin().listDatabases().then(function(dbs) {
            // Grab the databases
            dbs = dbs.databases;
            for(var i = 0; i < dbs.length; i++) {
                console.dir(dbs[i].name);
                new mongodb.Db(dbs[i].name, server, {}).open(function (error, client) {
                    if(error) callback(error);
                    // drop the database
                    client.dropDatabase(function(err, result) { 
                        if(err) callback(err);
                        client.close(); 
                    });                     
                });
            }
            db.close();
        });
    });     
};