Mongodb腳本解決復雜問題的計算能力有限,直接使用時較為吃力。很多情況下需要將數(shù)據(jù)讀出后在主程序中進一步完成運算,而在Java等高級語言中編寫這類集合式運算也比較麻煩。這時可以用集算器esProc來輔助,這里通過一個例子來說明。
為札達等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及札達網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為網(wǎng)站制作、成都網(wǎng)站設計、札達網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!Mongodb中有一個test集合如下:
>db.test.find({},{"_id":0})
{"value" : NumberLong(112937552) }
{"value" : NumberLong(715634640) }
{"value" : NumberLong(487229712) }
{"value" : NumberLong(79198330) }
{"value" : NumberLong(440998943) }
{"value" : NumberLong(93148782) }
{"value" : NumberLong(553008873) }
{"value" : NumberLong(336369168) }
{"value" : NumberLong(369669461) }
…
具體的:test集合包含多個value,每個value是一個數(shù)字串。每個數(shù)字串都要和另外所有的數(shù)字串比較,找出每個數(shù)字串的大相同數(shù)和大不同數(shù)。如果第1行和第n行都含有數(shù)字1,就算相同數(shù)有1個,如果第1行有1第n行沒有,就算不同數(shù)有1個。
集算器代碼如下:
A1:連接mongodb,ip和端口號是localhost:27017,數(shù)據(jù)庫是test,用戶名和密碼都是test。
A2:使用find函數(shù)從mongodb中取數(shù),形成游標。集合是test,過濾條件是空,鍵_id不取出。可以看出,esProc在find函數(shù)中采用了和mongdb的find語句一樣的參數(shù)格式。esProc的游標支持分批讀取和處理數(shù)據(jù),可以避免數(shù)據(jù)量過大,內(nèi)存出現(xiàn)溢出的情況。這里因為數(shù)據(jù)量不大,所以用fetch出游標的所有記錄。
A3:在A2的基礎上增加兩列,用來存放大相同數(shù)和大不同數(shù)。同時把value轉成字符串。
A4:針對A3集合循環(huán),循環(huán)體是B4到D10。
B4:取當前循環(huán)的value。
C4:利用函數(shù)將value分拆成單個字符組成的序列,去掉重復的值。
B5:對A3再進行一次內(nèi)層循環(huán)。循環(huán)體是C6到D10。
C5:如果內(nèi)層循環(huán)的循環(huán)位置和外層當前位置的相等,也就是說是同一個value的話,就跳過本次內(nèi)層循環(huán),進行下一次內(nèi)層循環(huán)。
C6:取得內(nèi)層循環(huán)的value。
C7:定義兩個變量same和diff,分別存放本次比較的相同數(shù)和不同數(shù),初始值為0。
C8:利用循環(huán)函數(shù),在內(nèi)層循環(huán)的value中逐個查找外層循環(huán)的value分拆的序列數(shù)值。如果能找到,則same自加1,否則diff自加1。
C9、C10:將same和diff和A4中的same和diff比較,將較大的重新賦值給A4中的same和diff。
運行結果是:
需要說明的是:esProc并不包含mongodb的java驅動包。用esProc來訪問mongodb,必須提前將mongodb的java驅動包(要求2.12.2或以上版,如mongo-java-driver-2.12.2.jar)放到[esProc安裝目錄]\common\jdbc中。
集算器esProc協(xié)助mongodb計算的腳本很容易集成到java中,只要增加一行A11,寫成result A3即可向java輸出resultset形式的結果,具體的代碼參考esProc教程。同樣,用java調用esProc訪問mongodb也必須將mongdb的java驅動包放到java程序的classpath中。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。