集算器協助MongoDB計算之數位比較

來源:互聯網
上載者:User

標籤:mongodb   指令碼   數位   比較   集算器   

         Mongodb指令碼解決複雜問題的計算能力有限,直接使用時較為吃力。很多情況下需要將資料讀出後在主程式中進一步完成運算,而在Java等進階語言中編寫這類集合式運算也比較麻煩。這時可以用集算器esProc來輔助,本文通過例子來說明使用方法。

         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是一個數字串。每個數字串都要和另外所有的數字串比較,找出每個數字串的最大相同數和最大不同數。如果第1行和第n行都含有數字1,就算相同數有1個,如果第1行有1第n行沒有,就算不同數有1個。

         集算器代碼如下:

         A1:串連mongodb,ip和連接埠號碼是localhost:27017,資料庫是test,使用者名稱和密碼都是test。

         A2:使用find函數從mongodb中取數,形成遊標。集合是test,過濾條件是空,鍵_id不取出。可以看出,esProc在find函數中採用了和mongdb的find語句一樣的參數格式。esProc的遊標支援分批讀取和處理資料,可以避免資料量過大,記憶體出現溢出的情況。這裡因為資料量不大,所以用fetch出遊標的所有記錄。

         A3:在A2的基礎上增加兩列,用來存放最大相同數和最大不同數。同時把value轉成字串。

         A4:針對A3集合迴圈,迴圈體是B4到D10。

         B4:取當前迴圈的value。

         C4:利用函數將value分拆成單個字元組成的序列,去掉重複的值。

         B5:對A3再進行一次內層迴圈。迴圈體是C6到D10。

         C5:如果內層迴圈的迴圈位置和外層當前位置的相等,也就是說是同一個value的話,就跳過本次內層迴圈,進行下一次內層迴圈。

         C6:取得內層迴圈的value。

         C7:定義兩個變數same和diff,分別存放本次比較的相同數和不同數,初始值為0。

         C8:利用迴圈函數,在內層迴圈的value中逐個尋找外層迴圈的value分拆的序列數值。如果能找到,則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協助mongodb計算的指令碼很容易整合到java中,只要增加一行A11,寫成result A3即可向java輸出resultset形式的結果,具體的代碼參考esProc教程。同樣,用java調用esProc訪問mongodb也必須將mongdb的java驅動包放到java程式的classpath中。


集算器協助MongoDB計算之數位比較

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.