如何在Node.js中实现GET请求查询MongoDB集合占用的存储空间字节数
操作步骤
第一步:MongoDB集合存储空间查询逻辑
查询集合实际占用存储空间使用MongoDB内置的collStats数据库命令即可,返回结果中几个关键字段说明:
size:集合内所有未压缩的文档数据总字节数,不包含索引、预分配的空闲空间storageSize:集合本身实际占用的磁盘存储空间字节数,包含预分配空间、文档压缩开销,不包含索引占用空间totalSize:集合+所有关联索引的总磁盘占用字节数,MongoDB 4.4及以上版本支持,可直接取该字段作为集合整体存储占用结果
第二步:Node.js GET接口实现
依赖安装
执行命令安装所需依赖:npm install express mongodb
完整代码示例
const express = require('express'); const { MongoClient } = require('mongodb'); const app = express(); const PORT = 3000; // MongoDB连接配置,替换为你实际的连接信息 const MONGODB_URI = 'mongodb://用户名:密码@127.0.0.1:27017'; const DB_NAME = '目标数据库名'; const TARGET_COLLECTION = '要查询的集合名'; let dbInstance = null; // 初始化MongoDB连接 async function initMongoConnect() { const client = await MongoClient.connect(MONGODB_URI); dbInstance = client.db(DB_NAME); console.log('MongoDB连接成功'); } // 集合存储空间查询GET接口 app.get('/api/collection-storage', async (req, res) => { try { if (!dbInstance) { return res.status(500).json({ code: 500, msg: '数据库未就绪' }); } // 调用collStats命令获取统计信息 const collectionStats = await dbInstance.command({ collStats: TARGET_COLLECTION }); res.json({ code: 200, data: { collectionName: TARGET_COLLECTION, totalStorageByte: collectionStats.totalSize, // 含索引的总磁盘占用 onlyCollectionByte: collectionStats.storageSize, // 仅集合本身磁盘占用 totalIndexByte: collectionStats.totalIndexSize // 索引总磁盘占用 } }); } catch (err) { res.status(500).json({ code: 500, msg: '查询失败', error: err.message }); } }); // 启动服务 initMongoConnect().then(() => { app.listen(PORT, () => { console.log(`服务已启动,端口:${PORT}`); }); });
注意事项
- 所用的MongoDB账号需要拥有
collStats权限,否则会返回权限错误 - 如果你使用Mongoose作为ODM,可直接通过
mongoose.connection.db.command({ collStats: '目标集合名' })调用统计命令,逻辑和上述示例一致 - 分片集群场景下返回的统计值为所有分片对应存储空间的总和
内容的提问来源于stack exchange,提问作者Ionut Popa
相关产品推荐
相关产品推荐

