mongodb數據恢復,Mongo散記--聚合(aggregation)amp; 查詢(Query)

 2023-12-06 阅读 26 评论 0

摘要:mongo官網:http://www.mongodb.org/ 工作中使用到Mongo,可是沒有系統的學習研究過Mongo,僅對工作過程中,在Mongo的使用過程中的一些知識點做一下記錄,并隨時補充,達到總結備忘的目的。 本篇主要終結記錄聚合和查詢。 mongodb數據恢


mongo官網:http://www.mongodb.org/

工作中使用到Mongo,可是沒有系統的學習研究過Mongo,僅對工作過程中,在Mongo的使用過程中的一些知識點做一下記錄,并隨時補充,達到總結備忘的目的。

本篇主要終結記錄聚合和查詢。

mongodb數據恢復?

聚合(aggregation)


Count


db.view_view.count()

db.view_view.count({_id:"521842"})

mongodb聚合查詢?db.view_view.find().count()

db.view_view.find({_id:"521842"}).count()


Distinct


db.view_view.distinct("_id")

mongodb主從復制和副本集、db.view_view.distinct("view") view是個數組,會把每一個數組的元素都distinct一下


Group


db.invoke_stat.group({key:{ip:true},cond:{date:{$gte:ISODate("2014-07-09 16:00:00"),$lt:ISODate("2014-07-10 16:00:00")}},reduce:function(curr,result){result.count += curr.times;},initial:{count:0},finalize:function(result) {result.count =  '$' + result.count}
});db.view_view.group({keyf:function(doc){return {view_num:doc.view.length}},reduce:function(curr,result){result.count += 1;result.id = curr._id;},initial:{count:0}
});

關于以上兩個group的解釋:

mongodb findandmodify,key/keyf:要依照進行分組的列,key是直接選取表中的列,kef是一個函數,對列進行一些處理,函數結果要返回一個對象,比方{view_num:doc.view.length},doc.view.length,是表中的數組列view的長度。

cond:是要過濾的查詢條件

reduce:處理函數

initial:返回列的初始值

finalize:對reduce的結果進行進一步處理,比方格式化

mongoclient?

MapReduce


db.invoke_stat.mapReduce(function(){var key = this.ip;emit(key,{r_times:this.times})},function(key,emits){total=0;for(var k in emits) {total+=emits[k].r_times;}return {r_times:total}},{out:'mr'}
)

以上:r_times是我們定義的要返回的列的名稱,ip和times是表中的列,mr是我們要把MapReduce的計算結果存入名稱為mr的集合中。

mapReduce的原型為:function (map, reduce, optionsOrOutString),以下詳細介紹一下函數的三個參數:

mongodb查詢集合的命令、map函數,它會遍歷集合中的每個文檔,this表示文檔,它使用emit方法將文檔按鍵分組,并返回須要統計的數據;

reduce函數,它將收集數據并統計,兩個參數分別為map函數返回的key值和數據數組;

optionsOrOutString參數為一個對象,定義了一些額外工作,比方上面的列子中使用out參數將統計結果放入到mr集合中,集合不存在則創建,存在了則覆蓋。


參數optionsOrOutString對象除了out鍵以外還有其他一些鍵:

mongodb刪除集合,finalize函數,同group的finalize完畢器一樣,能夠對reduce的結果做一些處理;

query文檔,在map函數前對文檔過濾;

sort文檔,在map函數前對文檔排序,必須先對排序的字段建立索引;

limit整數,在map函數前設定文檔數量;

scope文檔,js函數中用到的變量,client能夠通過scope傳遞一些值;

jsMode布爾,指定了map和reduce函數間傳遞的對象使用BSON格式還是javascript對象,默認值false,表示採用BSON格式,長處是中間的BSON數據會被存在硬盤上,所以傳遞的數據量能夠非常大,但會影響性能;採用javascript對象,性能較高,但僅僅能傳遞50萬個不同的key值;

verbos布爾,默認true,顯示具體的時間統計信息。


以上能夠看出MapReduce的強大,能夠非常輕松的實現不同的統計功能。


查詢(Query)


mongo查詢語法:

db.access_logs_140701.find({jxTime:{$gt:1407011300,$lt:1407011400},"curl.sku":"99978033"}).sort({jxTime:-1}).skip(1).limit(100)

db.invoke_stat.find({date:{$gte:ISODate("2014-07-09 10:00:00"),$lt:ISODate("2014-07-09 11:00:00")}})

db.view_view.find({view:{$size:10}}) 查詢數組長度為10的,當前Mongo不直接支持數據長度范圍查詢,比方查詢數據長度<10的,僅僅能MapReduce編程實現

轉載于:https://www.cnblogs.com/yxwkf/p/3916610.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/192691.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息