刚开始接触MongDB shell。这里记录一下学习的过程。
在控制台打开shell .
linux 环境下:/usr/local/mongo/bin/mongo
window 环境下:D:\MongoDB\mongodb-win32-i386-2.0.6\bin>mongo
基础部分可以参考:http://www.cnblogs.com/anan/archive/2012/06/15/2550553.html
首先创建一个js function
function query() { print("开始执行--------------"); //查询一个表video_encode var encode_coll=db.video_encode.find({status:{"$lt":10}}); print(encode_coll.count());//打印个数 //循环变量 while(encode_coll.hasNext()){ var v=encode_coll.next(); print(v.name);//打印属性 } print("结束执行--------------"); }
直接调用 query() 方法执行。 如下图
这个函数主要用于 根据条件从一个表中查询 记录 ,然后将记录 循环遍历 打印。
备注刚开始学习的时候遇到这样一个疑问。
在获得一个集合我怎么 知道如何操作这个集合 例如 var encode_coll=db.video_encode.find();
如何知道这个对象。
其实 你可以通过遍历对象 知道他的内部结构。
例如 :
for(var param in encode_coll){
print(param);
你将看到如图 这个是返回游标的属性:
很显然这个是有mongDB 内部对db.find() 返回对象的封装,以便我们更好的操作。
下面来做一个示例:
我有两张表:video_uplaod(uploadId,size) , transcode_job (id,uploadId,act)
我要统计act ="CLOUD" 所有的文件的大小。
思路先根据 act ="CLOUD" 从表transcode_job 中查出所有的uploadIds (Array).
在根据uploadIds 从表video_upload 统计所有的大小。
如图:
。
//统计转码失败率
function fun_encode_fail(){ //统计时间段,转码失败率 var b_time=new Date(2012,05,01); //2012-06-01 var e_time=new Date(2012,06,01);//2012-02-01 var temp_time=new Date(2012,05,01);//临时时间 b_time.setDate(b_time.getDate()+7); //添加七天 //循环添加日期 var weeks=0; //统计指定时间类,转码失败率 function failRate(startTime,endTime) { print("startTime:"+startTime+" endTime:"+endTime); var count=0;//转码个数 var retryTimes=0;//失败次数 var fail_rate=0;//失败率 //query 是查询条件,是json 对象 var query={"status":{"$in":[20,30,70,-100,-101,-200]},"createTime":{"$gt":startTime,"$lte":endTime}}; var cusor_encode=db.video_encode.find(query); var cusor_history=db.video_encode_history.find(query); //循环cusor_encode while(cusor_encode.hasNext()){ var video=cusor_encode.next(); if(video.retryTimes>0){ retryTimes+=video.retryTimes; } count++; } //循环cusor_history while(cusor_history.hasNext()){ var video=cusor_history.next(); if(video.retryTimes>0){ retryTimes+=video.retryTimes; } count++; } fail_rate=count+retryTimes==0?0:retryTimes/(count+retryTimes); print("转码数量:"+count); print("失败次数:"+retryTimes); print("失败率:"+fail_rate); var fail_rate_json={"week":weeks,"startTime":startTime,"endTime":endTime,"transcodeNums":count,"failTimes":retryTimes,"failRate":fail_rate}; db.fail_rate_info.insert(fail_rate_json); } //初始化表fail_rate_info db.fail_rate_info.remove(); while(b_time<e_time){ print("第"+(++weeks)+"周"); failRate(temp_time.getTime(),b_time.getTime()); //函数需要提前声明 temp_time.setDate(temp_time.getDate()+7); b_time.setDate(b_time.getDate()+7); } }