剛開始接觸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_encodevar 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-01var e_time=new Date(2012,06,01);//2012-02-01var 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_encodewhile(cusor_encode.hasNext()){ var video=cusor_encode.next(); if(video.retryTimes>0){ retryTimes+=video.retryTimes; } count++;}//迴圈cusor_historywhile(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_infodb.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);}}