這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)MongoDB中怎么實(shí)現(xiàn)聚合操作,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),個(gè)舊企業(yè)網(wǎng)站建設(shè),個(gè)舊品牌網(wǎng)站建設(shè),網(wǎng)站定制,個(gè)舊網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,個(gè)舊網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
MongoDB, 雖然一直是被稱為NO SQL ,文檔數(shù)據(jù)庫,可最近這兩年MONGODB 沒閑著,MONGODB 作為大數(shù)據(jù)分析的數(shù)據(jù)存儲(chǔ)空間使用的現(xiàn)在大有人在。
聚合作為MONGODB對(duì)于傳統(tǒng)數(shù)據(jù)庫 GROUP BY ,甚至窗口函數(shù)的在MONGODB的體現(xiàn),是比較常用的。 數(shù)據(jù)量小的情況下,性能不是問題,而如果數(shù)據(jù)量大的情況下,一般使用MONGODB 的聚合操作是有技巧和注意的。
首先的從聚合的初級(jí)原理說起,MONGODB 的聚合是分階段的,大致可以簡單的分離出,數(shù)據(jù)的提取,和數(shù)據(jù)計(jì)算。
下面的圖中,就是在聚合操作中可能會(huì)遇到的坑,在做一個(gè)簡單的聚合中,(數(shù)據(jù)量5000萬,為了浮現(xiàn)問題,所以直接做聚合,而且做得值是隨機(jī)值,所以你懂得) ,在操作中直接報(bào)錯(cuò),這個(gè)報(bào)錯(cuò)信息是由于在操作聚合時(shí),pipleline stage (具體看你的操作,這里是group stage,的使用已經(jīng)超過MONGODB 的限制 100MB) ,所以在數(shù)據(jù)量較大的情況下,并且沒有進(jìn)行數(shù)據(jù)額過濾,或者數(shù)據(jù)過濾(這里叫$match)后,還是數(shù)據(jù)量巨大的情況下,我們應(yīng)該在做聚合的時(shí)候,添加一個(gè)參數(shù),這個(gè)參數(shù)是在 MONGODB 3.4 支持的。
具體語句是
樣的情況下,就可以利用物理磁盤的環(huán)境來突破做聚合的限制。
那一般來說做聚合中需要注意什么總結(jié)有以下幾點(diǎn)(非完整,目前沒有使用到一些操作,這些操作不在總結(jié)范圍內(nèi))
1,不再聚合范圍的數(shù)據(jù)要進(jìn)行$match 提前過濾
2,顯示的字段要進(jìn)行控制,與聚合無關(guān)的字段,應(yīng)該提前$project
3, 如果聚合中包含排序,則排序要在$match之下
4,當(dāng)有多個(gè)$match操作時(shí),盡量進(jìn)行合并。
5, 對(duì)于 $match操作的 或 $sort 操作,在數(shù)據(jù)量大的情況下應(yīng)該建立索引
6 如果操作中包含$sort $limit的操作,應(yīng)該將$limit 的操作后置
另根據(jù)當(dāng)前的情況,大部分聚合可以優(yōu)化的命令在 MONGODB 3.4 及以上的版本。所以如果大數(shù)據(jù)量做聚合的運(yùn)算,還是升級(jí)到 3.4 及以上的版本為好。
上述就是小編為大家分享的MongoDB中怎么實(shí)現(xiàn)聚合操作了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。