一,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