前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Mongodb数据统计及数据清除操作命令

Mongodb数据统计及数据清除操作命令

作者头像
DBA实战
发布2024-11-22 13:47:02
发布2024-11-22 13:47:02
13800
代码可运行
举报
文章被收录于专栏:DBA实战DBA实战
运行总次数:0
代码可运行

以下操作是 MongoDB 中日常常用的一些统计命令,用于查看数据库和集合的基本信息(最好在数据库工具中执行这些命令):

每个数据库的统计信息

代码语言:javascript
代码运行次数:0
复制
db.adminCommand("listDatabases").databases.forEach(function (d) {
mdb = db.getSiblingDB(d.name);
printjson(mdb.stats());
})

统计某个DB集合的行数以及大小

代码语言:javascript
代码运行次数:0
复制
// 获取数据库中所有集合的信息
var collectionInfos = db.getCollectionInfos();// 遍历每个集合并打印其文档数量和大小
collectionInfos.forEach(function(collectionInfo) {
var collectionName = collectionInfo.name;
var stats = db.getCollection(collectionName).stats();
var count = stats.count;
var sizeGB = stats.size / (1024 * 1024 * 1024);
print("Collection: " + collectionName + ", Document Count: " + count + ", Size: " + sizeGB.toFixed(2) + "GB");
});

获取库内集合的索引情况

代码语言:javascript
代码运行次数:0
复制
// 索引 
db.getSiblingDB('your_database_name').getCollectionNames().forEach(function(collName) {
var indexes = db.getCollection(collName).getIndexes();
print("Indexes for " + collName + ": ");
printjson(indexes); }); 
 
// 索引个数: 
db.getSiblingDB('crmdb').getCollectionNames().forEach(function(collName) {
if (collName !== 'system.indexes') { // 避免统计 system.indexes 集合
var indexCount = db.getCollection(collName).getIndexes().length;
print("Number of indexes for " + collName + ": " + indexCount);
}
});4.4版本以上
db.getSiblingDB('your_database_name').getCollectionInfos({},{name: 1}).forEach(function(collection) {
var indexes = db.getCollection(collection.name).getIndexes();
print("Indexes for " + collection.name + ": ");
printjson(indexes);
});

单个库下每个集合每个索引的大小

代码语言:javascript
代码运行次数:0
复制

// 获取数据库中每个集合每个索引的大小
function getIndexSizesPerCollection(dbName) {
// 获取数据库中的所有集合名称
var collections = db.getSiblingDB(dbName).getCollectionNames();// 转换字节为 GB
function bytesToGB(bytes) {
return (bytes / (1024 * 1024 * 1024)).toFixed(3); // 保留三位小数
}// 遍历每个集合
collections.forEach(function(collectionName) {
var collection = db.getSiblingDB(dbName).getCollection(collectionName);
var stats = collection.stats();// 输出集合名称
print("Collection: " + collectionName);
// 输出每个索引及其大小
for (var indexName in stats.indexSizes) {
if (stats.indexSizes.hasOwnProperty(indexName)) {
print("  Index: " + indexName + " - Size: " + bytesToGB(stats.indexSizes[indexName]) + " GB");
}
}
});
}// 传入数据库名
getIndexSizesPerCollection('tcldb');

批量清除数据

代码语言:javascript
代码运行次数:0
复制
vim batchDelete_1.6.js

// 定义批次大小
var batchSize = 1000;// 定义删除条件
// 根据_id删除,不准确(经测试删除了一部分)
//var deleteCondition = { "_id": { "$lt": ObjectId("66603e31efb33823031c23b2") } };
//var deleteCondition = { "createTime": { "$lt": 1656000000000 } };
//var deleteCondition = { "createTime": { "$lt": "2022-06-24 00:00:00" } };
var deleteCondition = { "dayTime": { "$lt": "2022-06-24" } };
//var deleteCondition = { "createTime": null };// 初始化已删除文档计数
var deletedCount = 0;// 定义删除操作之间的间隔时间(毫秒)
var interval = 150;while (true) {
// 查询符合条件的文档并限制数量为 batchSize
var documents = db.pro_report.find(deleteCondition).limit(batchSize).toArray();// 如果没有符合条件的文档,则退出循环
if (documents.length === 0) {
break;
}// 获取所有符合条件的文档的 _id
var ids = documents.map(function(doc) { return doc._id; });// 删除符合条件的文档
var result = db.pro_report.deleteMany({ "_id": { "$in": ids } });
// 累加已删除文档计数
deletedCount += result.deletedCount;// 打印已删除文档的数量
print("Deleted " + result.deletedCount + " documents in this batch. Total deleted: " + deletedCount);
// 等待一段时间再继续下一批删除
sleep(interval);
}// 打印删除操作完成信息
print("Completed deletion. Total documents deleted: " + deletedCount);// 定义 sleep 函数
function sleep(milliseconds) {
var start = new Date().getTime();
while (new Date().getTime() - start < milliseconds);
}执行
nohup mongo 172.10.10.11:27000/cr8db -u crmuser -p s******N batchDelete_1.6.js >> del.log &  

在使用这些命令之前,建议先在开发或测试环境中进行验证,确保其对您的数据库环境没有不良影响,再在生产环境中使用。

如果您觉得这篇帖子对您有所帮助,别忘了点击关注、点赞支持我们!同时也欢迎大家多多转发,让更多人看到,感谢大家的支持与鼓励!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档