您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)MongoDB中怎么實(shí)現(xiàn)聚合操作,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
MongoDB, 雖然一直是被稱為NO SQL ,文檔數(shù)據(jù)庫,可最近這兩年MONGODB 沒閑著,MONGODB 作為大數(shù)據(jù)分析的數(shù)據(jù)存儲空間使用的現(xiàn)在大有人在。
聚合作為MONGODB對于傳統(tǒng)數(shù)據(jù)庫 GROUP BY ,甚至窗口函數(shù)的在MONGODB的體現(xiàn),是比較常用的。 數(shù)據(jù)量小的情況下,性能不是問題,而如果數(shù)據(jù)量大的情況下,一般使用MONGODB 的聚合操作是有技巧和注意的。
首先的從聚合的初級原理說起,MONGODB 的聚合是分階段的,大致可以簡單的分離出,數(shù)據(jù)的提取,和數(shù)據(jù)計算。
下面的圖中,就是在聚合操作中可能會遇到的坑,在做一個簡單的聚合中,(數(shù)據(jù)量5000萬,為了浮現(xiàn)問題,所以直接做聚合,而且做得值是隨機(jī)值,所以你懂得) ,在操作中直接報錯,這個報錯信息是由于在操作聚合時,pipleline stage (具體看你的操作,這里是group stage,的使用已經(jīng)超過MONGODB 的限制 100MB) ,所以在數(shù)據(jù)量較大的情況下,并且沒有進(jìn)行數(shù)據(jù)額過濾,或者數(shù)據(jù)過濾(這里叫$match)后,還是數(shù)據(jù)量巨大的情況下,我們應(yīng)該在做聚合的時候,添加一個參數(shù),這個參數(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)有多個$match操作時,盡量進(jìn)行合并。
5, 對于 $match操作的 或 $sort 操作,在數(shù)據(jù)量大的情況下應(yīng)該建立索引
6 如果操作中包含$sort $limit的操作,應(yīng)該將$limit 的操作后置
另根據(jù)當(dāng)前的情況,大部分聚合可以優(yōu)化的命令在 MONGODB 3.4 及以上的版本。所以如果大數(shù)據(jù)量做聚合的運(yùn)算,還是升級到 3.4 及以上的版本為好。
上述就是小編為大家分享的MongoDB中怎么實(shí)現(xiàn)聚合操作了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。