您好,登錄后才能下訂單哦!
對于本地化語言(例如:中文),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" : "男"}
…
直接用MongoDB的sort函數(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的腳本如下:
A1:連接MongoDB,ip和端口號是localhost:27017,數(shù)據(jù)庫是test,用戶名和密碼都是test。如果需要其他參數(shù)的話可以按照mongo://ip:port/db?arg=value&…格式繼續(xù)寫參數(shù)。
A2:使用find函數(shù)從MongoDB中取數(shù),形成游標。集合是person,過濾條件是空,指定鍵是name和gender??梢钥闯?/span>find函數(shù)和mongdb的find函數(shù)類似。esProc的游標是分批讀取和處理數(shù)據(jù),可以避免數(shù)據(jù)量過大,內(nèi)存出現(xiàn)溢出的情況。
A3:因為數(shù)據(jù)量不大,所以這里fetch出游標的所有記錄。
A4:使用sort按照name升序排序。排序所使用的語言是中文。集算器支持的其他本地化語言,見后。
運行的結(jié)果是:
需要說明的是:esProc并不包含MongoDB的java驅(qū)動包。用esProc來訪問MongoDB,必須提前將MongoDB的java驅(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也必須將mongdb的java驅(qū)動包放到java程序的classpath中。
MongoDB的java驅(qū)動包下載地址是:https://github.com/MongoDB/mongo-java-driver/releases。
免責聲明:本站發(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)容。