5

有一些类似的问题,但都涉及使用MongoDB NodeJS 驱动程序而不是Mongoose ODM

我阅读了文档,但找不到这样的功能。

4

3 回答 3

14

您不能直接从 mongoose 提供的连接中获取列表,但使用 mongoAdmin对象很容易,因为它包含一个名为的函数listDatabases

var mongoose = require('mongoose')
    , Admin = mongoose.mongo.Admin;

/// create a connection to the DB    
var connection = mongoose.createConnection(
    'mongodb://user:pass@localhost:port/database');
connection.on('open', function() {
    // connection established
    new Admin(connection.db).listDatabases(function(err, result) {
        console.log('listDatabases succeeded');
        // database list stored in result.databases
        var allDatabases = result.databases;    
    });
});
于 2013-02-12T01:25:51.187 回答
1

使用 mongoose(版本 6.10.*)获取所有 mongo 数据库列表的一种非常现代的方法是创建一个 mongoose 连接以连接到 Mongo 的 admin 数据库并确保您有一个admin user

Mongoose 对象是一个非常复杂的对象。列出数据库:

const connection = `mongodb://${encodeURIComponent(username)}:${encodeURIComponent(password)}@${hostname}:${port}/admin`

mongoose 是一个非常复杂的对象,它承诺执行多个功能。列出数据库:

mongoose.connect(connection,  {  useNewUrlParser: true ,  useUnifiedTopology: true }).then( (MongooseNode) => { 

/* I use the default nativeConnection object since my connection object uses a single hostname and port. Iterate here if you work with multiple hostnames in the connection object */
                    
const nativeConnetion =  MongooseNode.connections[0]

//now call the list databases function
    new Admin(nativeConnetion.db).listDatabases(function(err, results){
        console.log(results)  //store results and use
    });
})

结果:

{ databases:
   [ { name: 'admin', sizeOnDisk: 184320, empty: false },
     { name: 'config', sizeOnDisk: 73728, empty: false },
     { name: 'local', sizeOnDisk: 73728, empty: false },
     { name: 'test', sizeOnDisk: 405504, empty: false } ],
  totalSize: 737280,
  ok: 1 }
于 2020-04-23T22:52:46.600 回答
-5

尝试运行此代码。原始取自Gist

于 2013-02-11T23:24:19.657 回答