如何在nodejs 3.0 mongo-client中获取其他数据库实例?

时间:2018-04-16 06:04:31

标签: mongodb

我使用mongo-nodejs 2.2并升级到3.0。升级后,我发现Db类中的方法db()不再存在(http://mongodb.github.io/node-mongodb-native/3.0/api/Db.html)。此方法对于切换到不同的数据库实例非常有用。我想知道如何使用最新版本切换到不同的数据库。

1 个答案:

答案 0 :(得分:0)

好的,它已经消失了,它被记录为已经消失,真正的信息是你应该使用Mongoclient.prototype.db代替:

来自3.0 Changes

  

我们删除了以下API方法。

     
      
  • Db.prototype.authenticate
  •   
  • Db.prototype.logout
  •   
  • Db.prototype.open
  •   
  • Db.prototype.db
  •   
     

...

     

我们添加了以下API方法。

     
      
  • MongoClient.prototype.logout
  •   
  • MongoClient.prototype.isConnected
  •   
  • MongoClient.prototype.db
  •   

此处的基本教训是,无论您何时直接使用Db,都应该使用MongoClient实例。这是从第一个连接获得的:

const { MongoClient } = require('mongodb');

(async function() {
  try {
    const conn = await MongoClient.connect('mongodb://localhost');

    let test = conn.db('test');
    let admin = test.admin();

    console.log(admin);

    let another = conn.db('another');

    console.log(another);

  } catch(e) {
    console.error(e);
  } finally {
    process.exit();
  }
})()

返回输出,如:

Admin {
  s:
   { db:
      Db {
        domain: null,
        _events: {},
        _eventsCount: 0,
        _maxListeners: undefined,
        s: [Object],
        serverConfig: [Getter],
        bufferMaxEntries: [Getter],
        databaseName: [Getter] },
     topology:
      Server {
        domain: null,
        _events: [Object],
        _eventsCount: 25,
        _maxListeners: Infinity,
        clientInfo: [Object],
        s: [Object] },
     promiseLibrary: [Function: Promise] } }
Db {
  domain: null,
  _events: {},
  _eventsCount: 0,
  _maxListeners: undefined,
  s:
   { databaseName: 'another',
     dbCache: {},
     children: [],
     topology:
      Server {
        domain: null,
        _events: [Object],
        _eventsCount: 25,
        _maxListeners: Infinity,
        clientInfo: [Object],
        s: [Object] },
     options:
      { readPreference: [Object],
        promiseLibrary: [Function: Promise] },
     logger: Logger { className: 'Db' },
     bson: BSON {},
     readPreference: ReadPreference { mode: 'primary', tags: undefined, options: undefined },
     bufferMaxEntries: -1,
     parentDb: null,
     pkFactory: undefined,
     nativeParser: undefined,
     promiseLibrary: [Function: Promise],
     noListener: false,
     readConcern: undefined },
  serverConfig: [Getter],
  bufferMaxEntries: [Getter],
  databaseName: [Getter] }

有趣的是,admin()个辅助工具仍然存在于Db个实例中,当然这对于旧的db()实际上只是一个“预先填充”的选择。

从底线开始,使用连接中的MongoClient实例代替将来的所有代码。