日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python js 效率_巧用 db.system.js 提升20% 开发效率

發布時間:2024/10/6 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python js 效率_巧用 db.system.js 提升20% 开发效率 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開門見山,20%是我造的,哈哈,為的就是讓各位mongoer能夠對db.system.js collection 引起注意。

這個也是在我最近瀏覽InfoQ 的時候,看到一篇關于MongoDB 文章

system.js

先來看下官文給出的解釋:

.system.js

The .system.js collection holds special JavaScript code for use in server side JavaScript. See Store a JavaScript Function on the Server for more information.

解釋很簡單,馬上就進入實操環節

db.system.js.save(

{

_id: "echoFunction",

value : function(x) { return x; }

}

)

但是并沒有任何效果,shell里表示,echoFunction undefined.

在查看 db.system.js 確實有一條記錄

> db.system.js.find({_id: 'echoFunction'}).pretty()

{

"_id" : "echoFunction",

"value" : {

"code" : "function (x) { return x; }"

}

}

繼續查看doc,原來還需要通過 loadServerScripts 函數 load 進數據字典,這個操作就有點像我們在linux 環境中 source ~/.bash_profile 一樣了。

執行一次,db.loadServerScripts() , 果然就可以使用我們自定義的函數了。

那問題來了,如何提升我們的工作效率呢?

在MongoDB 中,雖然有 $sum, $avg 等一系列的pipeline,但是,對于DBA也好,Developer 也罷,許多的報表、統計aggregation 并不能完全代勞,mapReduce 就是為了這個時候而上的,那每次都要去寫一個function 去 sum,去 avg 總顯得在反復造輪子,因此我們完全可以在這種情況下,在 db.system.js 中加入我們常用的統計函數,比如 sum, avg, max, min 等等。

這里我就給出自己常用的函數供大家參考:

SUM

db.system.js.save( { _id : "Sum" ,

value : function(key,values)

{

var total = 0;

for(var i = 0; i < values.length; i++)

total += values[i];

return total;

}});

AVERAGE

db.system.js.save( { _id : "Avg" ,

value : function(key,values)

{

var total = Sum(key,values);

var mean = total/values.length;

return mean;

}});

MAX

db.system.js.save( { _id : "Max" ,

value : function(key,values)

{

var maxValue=values[0];

for(var i=1;i

{

if(values[i]>maxValue)

{

maxValue=values[i];

}

}

returnmaxValue;

}});

MIN

db.system.js.save( { _id : "Min" ,

value : function(key,values)

{

var minValue=values[0];

for(var i=1;i

{

if(values[i]

{

minValue=values[i];

}

}

return minValue;

}});

VARIANCE

db.system.js.save( { _id : "Variance" ,

value : function(key,values)

{

var squared_Diff = 0;

var mean = Avg(key,values);

for(var i = 0; i < values.length; i++)

{

var deviation = values[i] - mean;

squared_Diff += deviation * deviation;

}

var variance = squared_Diff/(values.length);

return variance;

}});

STD DEVIATION

db.system.js.save( { _id : "Standard_Deviation"

, value : function(key,values)

{

var variance = Variance(key,values);

return Math.sqrt(variance);

}});

MapReduce

那么接下來我們就用Map-Reduce來結合之前的自定義聚合函數來做詳解。(這里權當各位大佬熟悉Map-Reduce了)

引入demo data

{ "_id" : ObjectId("4f7be0d3e37b457077c4b13e"), "_class" : "com.infosys.mongo.Sales", "orderId" : 1, "orderDate" : "26/03/2011",

"quantity" : 20, "salesAmt" : 200, "profit" : 150, "customerName" : "CUST1", "productCategory" : "IT", "productSubCategory" : "software",

"productName" : "Grad", "productId" : 1 }

{ "_id" : ObjectId("4f7be0d3e37b457077c4b13f"), "_class" : "com.infosys.mongo.Sales", "orderId" : 2, "orderDate" : "23/05/2011",

"quantity" : 30, "salesAmt" : 200, "profit" : 40, "customerName" : "CUST2", "productCategory" : "IT", "productSubCategory" : "hardware",

"productName" : "HIM", "productId" : 1 }

{ "_id" : ObjectId("4f7be0d3e37b457077c4b140"), "_class" : "com.infosys.mongo.Sales", "orderId" : 3, "orderDate" : "22/09/2011",

"quantity" : 40, "salesAmt" : 200, "profit" : 80, "customerName" : "CUST1", "productCategory" : "BT", "productSubCategory" : "services",

"productName" : "VOCI", "productId" : 2 }

{ "_id" : ObjectId("4f7be0d3e37b457077c4b141"), "_class" : "com.infosys.mongo.Sales", "orderId" : 4, "orderDate" : "21/10/2011",

"quantity" : 30, "salesAmt" : 200, "profit" : 20, "customerName" : "CUST3", "productCategory" : "BT", "productSubCategory" : "hardware",

"productName" : "CRUD", "productId" : 2 }

{ "_id" : ObjectId("4f7be0d3e37b457077c4b142"), "_class" : "com.infosys.mongo.Sales", "orderId" : 5, "orderDate" : "21/06/2011",

"quantity" : 50, "salesAmt" : 200, "profit" : 20, "customerName" : "CUST3", "productCategory" : "BT", "productSubCategory" : "hardware",

"productName" : "CRUD", "productId" : 1 }

創建聚合函數Sum

db.system.js.save({

_id : "Sum" ,

value: function(key,values) {

var total = 0;

for(var i = 0; i < values.length; i++)

total += values[i];

return total;

}

});

結合Sum 聚合函數執行Map-Reduce

db.runCommand(

{

mapreduce: "sales" ,

map: function() {

emit({

key0:this.productCategory,

key1:this.productSubCategory,

key2:this.productName

},

this.salesAmt

);

},

reduce: function(key, values) {

var result = Sum(key, values);

return result;

},

out: {inline: 1}

}

)

這里,就直接把結果輸出的stdout 了,如果需要可以指定collection,將我們的Map-Reduce結果存儲下來。

來看一下結果

{

"results" : [

{

"_id" : {

"key0" : "BT",

"key1" : "hardware",

"key2" : "CRUD"

},

"value" : 400

},

{

"_id" : {

"key0" : "BT",

"key1" : "services",

"key2" : "VOCI"

},

"value" : 200

},

{

"_id" : {

"key0" : "IT",

"key1" : "hardware",

"key2" : "HIM"

},

"value" : 200

},

{

"_id" : {

"key0" : "IT",

"key1" : "software",

"key2" : "Grad"

},

"value" : 200

}

],

"timeMillis" : 14,

"counts" : {

"input" : 5,

"emit" : 5,

"reduce" : 1,

"output" : 4

},

"ok" : 1

}

這里可以看到,我們的Sum 函數已經將emit 過后的 "productCategory" : "BT", "productSubCategory" : "hardware", "productName" : "CRUD" 這組數據的 salesAmt 累加了。

到這里,我們基本就可以實現一個自定義的Function + Map-Reduce 的強大組合了!

歡迎各位大神前來評論。

每周五,敬請期待,上海小胖[MiracleYoung] 獨更。

如果夏雨荷還在大明湖畔等著我的話,我就不更了。

總結

以上是生活随笔為你收集整理的python js 效率_巧用 db.system.js 提升20% 开发效率的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人五区 | 久草新| 亚洲va欧美va国产综合久久 | 九色porny自拍视频在线播放 | 精品www久久久久久奶水 | 欧美国产成人在线 | 国产日韩欧美自拍 | 国产精品久久久久久免费 | www.99re7.com| 99精品欧美一区二区蜜桃免费 | 久久久888 | 亚洲一区二区三区不卡视频 | 国产女人高潮毛片 | 精品无码一区二区三区在线 | 午夜影院免费看 | 亚洲一片| 999av视频 | 五月婷婷激情综合 | 综合国产在线 | 日本高清免费看 | 精品国产乱子伦一区二区 | 在线视频日韩 | 国产性生活片 | 黄色www网站 | 尤物视频在线观看视频 | h欧美| 亚色中文 | 国产精品4p | 欧美一区二区三区四区五区六区 | 欧美少妇视频 | 久操精品 | 伊人青草 | 五月婷婷免费视频 | 韩国三级视频在线 | 欧美伦理影院 | 中文字幕在线影院 | 女人脱裤子让男人捅 | 国产天天操 | 黑人巨大xxxxx性猛交 | 网站免费视频www | 久操福利视频 | 自拍1区| 美女赤身免费网站 | 国产精品77 | 99日精品| 香蕉伊人网 | 婷婷麻豆| 涩涩片影院| 欧美日韩字幕 | 欧美精品导航 | 国产又黄视频 | 又黄又爽网站 | av高清在线 | 极品探花在线观看 | 黄色av国产 | 国模av在线 | 蜜臀av中文字幕 | 日韩中文三级 | 超碰牛牛| 美女av网 | 日韩av.com| 综合网久久 | 国产超碰 | 精品国产乱 | 色桃av| 欧美一级网址 | 欧美黄色一区二区 | 欧美一级视频免费观看 | 日韩看片 | 国产精品五月天 | 五月婷婷综合久久 | 国产精品成人免费 | 黄色一级免费观看 | 99久久久无码国产精品 | 天天爽av | 在线播放不卡av | 伊是香蕉大人久久 | 亚洲国产精品99久久久久久久久 | 久久久久成人精品免费播放动漫 | 欧美激情三区 | 夜夜天堂| 成人性做爰aaa片免费 | 欧美大波大乳巨大乳 | 性色av蜜臀av浪潮av老女人 | 一级片美女 | 蜜臀av粉嫩av懂色av | 亚洲资源av| 成人免费视频视频 | 亚洲色欧美 | 日韩欧美一区二区三区久久婷婷 | 激情一区二区三区 | 一区二区乱码 | 欧美激情成人 | 美女被啪羞羞粉色视频 | 禁漫天堂免费网站 | 污污污www精品国产网站 | 国产日韩三级 | 亚洲国产精品激情在线观看 | 国产做a|