如何获取MongoDB所有索引的使用情况与大小并在同一结果中输出?
同时获取MongoDB索引使用情况与大小的方法
你可以通过结合db.collection.stats()的indexSizes数据和$indexStats聚合阶段,在一次查询中同时获取两项信息。具体步骤如下:
- 先获取目标集合的索引大小数据并存储为变量:
const indexSizes = db.getCollection('your_collection').stats().indexSizes;
(注意替换your_collection为实际集合名)
- 执行聚合管道,将索引使用情况与大小数据合并:
db.getCollection('your_collection').aggregate([ // 获取索引使用统计 { "$indexStats": {} }, // 将对应索引的大小添加到结果文档中 { "$addFields": { "size": { $let: { vars: { // 将indexSizes对象转为键值对数组,匹配当前索引名对应的条目 idxEntry: { $arrayElemAt: [ { $objectToArray: indexSizes }, { $indexOfArray: [ { $objectToArray: indexSizes }, { "k": "$name" } ]} ]} }, in: "$$idxEntry.v" } } }} ])
结果说明
返回的每个文档会包含$indexStats提供的所有使用信息(如accesses、name、shardVersion等),同时新增size字段显示该索引的占用空间大小。
注意事项
- 该方法要求MongoDB版本≥3.4(
$indexStats和$objectToArray均在3.4版本引入) - 如果你的环境不支持使用变量(比如某些GUI工具),可以将
indexSizes的内容直接嵌入聚合管道中,但这种方式不够灵活,建议优先使用变量方式。
内容的提问来源于stack exchange,提问作者eliezra236
相关产品推荐
相关产品推荐

