【问题标题】:How to get MongoClient object from Mongoose?如何从 Mongoose 获取 MongoClient 对象?
【发布时间】:2019-02-09 11:53:41
【问题描述】:

我必须从 mongoose 连接对象中获取 MongoClient 对象,以便我可以重用 Agenda 或我需要的其他地方。

db.js

// Export the mongoose instance
module.exports = () => {
  mongoose.Promise = global.Promise;
  try {
    console.log('DBURL:', dbConfig.url);
    const { url, options } = dbConfig;
    mongoose
      .connect(url, options)
      .then(() => console.log('DB Connected'), err => console.log(err, options));

    mongoose.connection.on('connected', () => {
      logger.log('info', 'Mongoose default connection opened');
    });

    mongoose.connection.on('error', (err) => {
      // logger.log('error',  'Couldn't able to connect to MongoDB', err);
      // Blow system on db error
      logger.log('info', 'Mongoose default connection opened');
      throw err;
    });

    mongoose.connection.on('reconnected', () => {
      logger.log('info', 'Mongo connection reconnected', arguments);
    });

    mongoose.connection.on('disconnecting', () => {
      logger.log('error', 'Mongoose connection disconnecting', arguments);
    });

    mongoose.connection.on('disconnected', () => {
      logger.log('error', 'Mongoose connection disconnected', arguments);
    });
  } catch (e) {
    console.log("Couldn't connect to mongo:", e);
  }

  return mongoose;
};

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    您可以使用 getClient() 方法获取 mongoClient,如文档中所示:getClient()

    基本上你需要做这样的事情

    const client = mongoose.connection.getClient()
    

    例如,要将它与 connect-mongo 一起使用,您可以从 db.js 中导出它,然后在需要的地方导入并使用。

    //db.js
    module.exports.client = mongoose.connection.getClient()
    
    //app.js
    const { client } = require('path to file')
    const store = MongoStore.create({ client })
    

    【讨论】:

      【解决方案2】:
      config = require('./configs');
      mongoose = require('mongoose');
      module.exports = function() {
      var db = mongoose.connect(config.db, config.mongoDBOptions).then(
          () => {
              console.log('MongoDB connected')
          },
          (err) => {
              console.log('MongoDB connection error',err)
          }
          );
      
      require('../app/models/xxx.server.model');
      require('../app/models/yyy.server.model');
      return db;};
      

      【讨论】:

      • 我认为这行不通,mongoose.connect() 返回一个解析为 Mongoose 实例的承诺。 OP 正在寻找底层的 MongoClient 实例。
      【解决方案3】:

      您可以通过以下方法获取 MongoClient 对象:

      const { MongoClient, ObjectID } = require('mongodb');
      
       function(req, res) {
       (async function mongo() {
            let client;
            try {
              client = await MongoClient.connect(url, {useNewUrlParser: true});
              debug('Connected correctly to server');
      
              const db = client.db(dbName);
      }
      

      【讨论】:

      • 这会创建一个 MongoClient 实例,它不会从 mongoose 获取 MongoClient 实例。
      猜你喜欢
      • 2018-09-22
      • 2021-05-17
      • 1970-01-01
      • 2017-09-06
      • 2016-01-23
      • 1970-01-01
      • 2011-10-14
      • 2016-09-01
      • 2018-07-08
      相关资源
      最近更新 更多