刚开始接触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);
}
}
本文介绍了一个使用MongoDB进行复杂查询的实例,包括定义查询函数、处理时间范围内的统计数据及失败率计算等。通过示例展示了如何操作游标、进行表间关联查询以及统计计算。
723

被折叠的 条评论
为什么被折叠?



