溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

集算器協(xié)助MongoDB計算之本地化排序

發(fā)布時間:2020-06-08 08:12:28 來源:網(wǎng)絡(luò) 閱讀:518 作者:datanalysis 欄目:MongoDB數(shù)據(jù)庫

對于本地化語言(例如:中文),MongoDB是按照UNICODE編碼排序,而不是根據(jù)本地語言的編碼排序。用esProc結(jié)合MongoDB可以方便的實現(xiàn)本地化語言的排序(例如:中文按照拼音排序)。下面我們以中文為例,來看一下具體做法。

MongoDB中的集合person保存了姓名和性別如下:

>db.person.find()

{"_id" : ObjectId("544e4e070f03ad39eb2bf498"),"name" : "宋江", "gender" : ""}

{"_id" : ObjectId("544e4e070f03ad39eb2bf499"),"name" : "李逵", "gender" : ""}

{"_id" : ObjectId("544e4e070f03ad39eb2bf49a"),"name" : "吳用", "gender" : ""}

{"_id" : ObjectId("544e4e070f03ad39eb2bf49b"),"name" : "晁蓋", "gender" : ""}

{"_id" : ObjectId("544e4e070f03ad39eb2bf49c"),"name" : "公孫勝", "gender" : "" }

{"_id" : ObjectId("544e4e070f03ad39eb2bf49d"),"name" : "魯智深", "gender" : "" }

{"_id" : ObjectId("544e4e070f03ad39eb2bf49e"),"name" : "武松", "gender" : ""}

{"_id" : ObjectId("544e4e070f03ad39eb2bf49f"),"name" : "阮小二", "gender" : "" }

{"_id" : ObjectId("544e4e070f03ad39eb2bf4a0"),"name" : "楊志", "gender" : ""}

{"_id" : ObjectId("544e4e070f03ad39eb2bf4a1"), "name": "孫二娘", "gender" : "" }

{"_id" : ObjectId("544e4e070f03ad39eb2bf4a2"),"name" : "扈三娘", "gender" : "" }

{"_id" : ObjectId("544e4e080f03ad39eb2bf4a3"),"name" : "燕青", "gender" : ""}

直接用MongoDBsort函數(shù),沒有按照拼音排序:

>db.person.find({},{"name":1,"gender":1,"_id":0}).sort({"name":1})

{"name" : "公孫勝", "gender" : "" }

{"name" : "吳用", "gender" : "" }

{"name" : "孫二娘", "gender" : "" }

{"name" : "宋江", "gender" : "" }

{"name" : "扈三娘", "gender" : "" }

{"name" : "晁蓋", "gender" : "" }

{"name" : "李逵", "gender" : "" }

{"name" : "楊志", "gender" : "" }

{"name" : "武松", "gender" : "" }

{"name" : "燕青", "gender" : "" }

{"name" : "阮小二", "gender" : "" }

{"name" : "魯智深", "gender" : "" }

 

esProc協(xié)助MongoDB的腳本如下:

集算器協(xié)助MongoDB計算之本地化排序

    A1:連接MongoDB,ip和端口號是localhost:27017,數(shù)據(jù)庫是test,用戶名和密碼都是test。如果需要其他參數(shù)的話可以按照mongo://ip:port/db?arg=value&…格式繼續(xù)寫參數(shù)。

    A2:使用find函數(shù)從MongoDB中取數(shù),形成游標。集合是person,過濾條件是空,指定鍵是namegender??梢钥闯?/span>find函數(shù)和mongdbfind函數(shù)類似。esProc的游標是分批讀取和處理數(shù)據(jù),可以避免數(shù)據(jù)量過大,內(nèi)存出現(xiàn)溢出的情況。

A3:因為數(shù)據(jù)量不大,所以這里fetch出游標的所有記錄。

A4:使用sort按照name升序排序。排序所使用的語言是中文。集算器支持的其他本地化語言,見后。

運行的結(jié)果是:

集算器協(xié)助MongoDB計算之本地化排序

需要說明的是:esProc并不包含MongoDBjava驅(qū)動包。用esProc來訪問MongoDB,必須提前將MongoDBjava驅(qū)動包(要求2.12.2或以上版,如mongo-java-driver-2.12.2.jar)放到[esProc安裝目錄]\common\jdbc中。

esProc協(xié)助MongoDB計算的腳本很容易集成到java中,只要增加一行A5,寫成result A4即可向java輸出resultset形式的結(jié)果,具體的代碼參考esProc教程。同樣,用java調(diào)用esProc訪問MongoDB也必須將mongdbjava驅(qū)動包放到java程序的classpath中。

MongoDBjava驅(qū)動包下載地址是:https://github.com/MongoDB/mongo-java-driver/releases。




向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI