【问题标题】:How to get MongoDB database stats with mongoose?如何使用 mongoose 获取 MongoDB 数据库统计信息?
【发布时间】:2019-10-04 06:07:09
【问题描述】:

我正在尝试使用 mongoose 获取 MongoDB 统计信息,例如用于健康指标的数据库总大小,但一直无法做到。

我找到了this 一段代码。但它似乎不起作用。

db.js:

const db = mongoose.connect(config.MONGODB_URL, settings, (err) => {
  mongoose.set('useFindAndModify', false);
  logger.info(`connecting ${config.MONGODB_URL}`);
  if (err) {
    logger.error(`failed db connection: ${err}`);
  }
});

module.exports = db;

monitor.js:

const db = require('../store/db');

function mongoUsage(cb) {
  db.db.stats((err, data) => {
    logger.debug(data);
  });
  cb();
}

但是我在运行该函数时收到TypeError: Cannot read property 'stats' of undefined 错误。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    我认为,您必须首先确保您的数据库连接已经建立。在提供的示例中,您可能会注意到 db.once 调用等待 open 事件发生。换句话说,我们有一个与正在运行的数据库的挂起连接,目标是在连接成功时得到通知。因此,您的连接对象仍处于创建过程中,因此undefined 尚未。

    假设您已适当地定义了loggerconfigsettings,请尝试相应地修改您的文件:

    db.js:

    const mongoose = require('mongoose');
    
    mongoose.connect(config.MONGODB_URL, settings, (err) => {
        mongoose.set('useFindAndModify', false);
        logger.info(`connecting ${config.MONGODB_URL}`);
        if (err) {
          logger.error(`failed db connection: ${err}`);
        }
    });
    
    module.exports = mongoose.connection;
    

    monitor.js:

    const db = require('../store/db');
    
    db.once('open', () => {
      // call stats directly
      db.db.stats((err, data) => {
        logger.debug(data);
    
      });
    
      // or you can call your mongoUsage here
    });
    

    使用上面的代码,我成功得到以下结果:

    { db: 'test-db',
      collections: 1,
      views: 0,
      objects: 1,
      avgObjSize: 844,
      dataSize: 844,
      storageSize: 36864,
      numExtents: 0,
      indexes: 6,
      indexSize: 221184,
      fsUsedSize: 2271096832,
      fsTotalSize: 19163181056,
      ok: 1 }
    

    我希望它有助于解决您的问题。

    【讨论】:

    • 尝试我现在​​得到TypeError: db.once is not a function
    • 你的 db.js 符合答案吗?我已将导出更改为 mongoose.connection 而不是 db 对象,就像您之前所做的那样。
    • 哦,不,我是个笨蛋。现在可以了!非常感谢:)
    猜你喜欢
    • 2023-02-08
    • 2021-11-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2013-11-06
    相关资源
    最近更新 更多