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

Drop multiple Mongo Databases using the Node JS Driver

本文关键字:Mongo 数据库 删除 NodeJS 驱动程序 使用      更新时间:2023-09-26

我可以使用Node JS Driver Db class Method dropDatabase来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中的所有数据库,只需连接到根目录如下:

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个数据库)?

他们的方式类似于连接到根(不指定任何数据库名称)并使用特定的数据库名称删除数据库吗?

您可以使用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();
        });
    });     
};