一,mongo知识储备:
1. 获取mongoDB中数据库的大小命令
use databasename
db.stats()
显示信息如下
> db.stats()
{
"collections" : 3,
"objects" : 80614,
"dataSize" : 21069700,
"storageSize" : 39845376,
"numExtents" : 9,
"indexes" : 2,
"indexSize" : 6012928,
"ok" : 1
}
其中storage表示的就是数据库的大小,显示出的数字的单位是字节,因此如果需要转换单位为KB需要除以1024
2. 获取MongoDB中collection
db.collection.dataSize()
//collection中的数据大小
db.collection.storageSize()
//为collection分配的空间大小,包括未使用的空间
db.collection.totalIndexSize()
collection中索引数据大小
db.collection.totalSize()
collection中索引+data所占空间
二,js操作实例:
1,遍历一个mongo库下所有的表
// 获取一个collection下所有的表,并进行操作
var today = new Date();
var beforeday = new Date(today.valueOf()-24*3600*1000*2);
var beforedate = beforeday.getFullYear()*10000+(beforeday.getMonth()+1)*100+beforeday.getDate();
print(beforedate+'==============clean==========') //前天日期 conn = new Mongo();
db = conn.getDB("collection1"); //选择数据库
lists = db.getCollectionNames();
for(i in lists){
if(lists[i].substr(0,9) == 'sendclick'){
print(lists[i]+"-----"+db[lists[i]].count())
db[lists[i]].remove({cd:{$lte:beforedate}})
}
}
for(i in lists){
if(lists[i].substr(0,9) == 'sendclick' && db[lists[i]].count() == 0){
print(lists[i]+"----drop---"+db[lists[i]].count())
db[lists[i]].drop()
}
}
2,处理遍历输出结果
db.table1.group({key:{xxx:1},cond:{cd:20160524},reduce:function(obj,prev){prev.cnum++},initial:{cnum:0}}).forEach(
function(x){
db.table2.insert(x)
}
)
db.table3.group({key:{xxx:1},cond:{cd:20160601,cid:"xxxxxxxxx"},reduce:function(obj,prev){prev.cnum++},initial:{cnum:0}}).forEach(
function(x){
if(x.cnum > 3){
y = {};
y._id = x.xxx;
y.cd = x.cd;
db.table4.insert(y);
print(x.xxx);
print(x.cnum);
}
}
)
在linux环境之下js脚本
>mongo clean.js