軟件本地化,可讓用戶根據(jù)自己的語(yǔ)言環(huán)境、使用習(xí)慣來(lái)選擇不同的語(yǔ)言版本,從而大限度提高使用體驗(yàn)。隨著軟件技術(shù)的進(jìn)步,本地化能力得到廣泛支持、不斷向前發(fā)展,也成為軟件成熟的重要標(biāo)志。本文討論的MongoDB本地化排序之路也是從無(wú)到有,一點(diǎn)點(diǎn)積累向前發(fā)展的。先前版本只能按照UNICODE編碼排序,而不是根據(jù)本地語(yǔ)言的編碼排序。后來(lái)版本增加了對(duì)本地化排序的支持,但它的前提是要在創(chuàng)建集合時(shí)進(jìn)行語(yǔ)言設(shè)置,否則無(wú)效,而且對(duì)已經(jīng)存儲(chǔ)了數(shù)據(jù)的集合也無(wú)效。通過(guò)集算器SPL語(yǔ)言結(jié)合MongoDB進(jìn)行操作則可以方便實(shí)現(xiàn)本地化語(yǔ)言的排序(例如:中文按照拼音排序),實(shí)現(xiàn)起來(lái)也非常容易。下面就用中文例子進(jìn)行說(shuō)明:
集合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ù),無(wú)法按照拼音排序:
> 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":"男" }
…
使用集算器 SPL 的代碼如下:
? ? ?
A1:連接 MongoDB,連接字格式為 mongo://ip:port/db?arg=value&…。
A2:使用 find 函數(shù)從 person 中取數(shù),形成游標(biāo),過(guò)濾條件是空,指定鍵是 name 和 gender。SPL 的游標(biāo)是分批讀取和處理數(shù)據(jù),可以避免數(shù)據(jù)量過(guò)大,以防內(nèi)存溢出。
A3:因?yàn)閿?shù)據(jù)量不大,所以這里 fetch 出游標(biāo)的所有記錄。
A4:關(guān)閉連接。
A5:使用 sort 按照字段 name 以中文拼音方式升序排序。
運(yùn)行的結(jié)果如下:
????????
sort排序時(shí),可根據(jù)需要設(shè)置成不同的語(yǔ)言,實(shí)現(xiàn)對(duì)查詢結(jié)果的排序。集算器SPL也支持其他本地化語(yǔ)言,見(jiàn)后面說(shuō)明。
需要說(shuō)明的是:集算器esProc并不包含mongodb的java驅(qū)動(dòng)包。用esProc來(lái)訪問(wèn)mongodb,必須提前將mongodb的java驅(qū)動(dòng)包(例如:mongo-java-driver-2.12.2.jar)放到集算器設(shè)置的外部庫(kù)目錄extLib\MongoCli下。
除了在集算器中直接計(jì)算,上述使用SPL協(xié)助mongodb計(jì)算的腳本也很容易集成到j(luò)ava中,只要增加一行,寫成return A5即可向java輸出resultset形式的結(jié)果,具體的代碼參考esProc教程。同樣,用java調(diào)用esProc訪問(wèn)mongodb也必須將mongdb的java驅(qū)動(dòng)包放到j(luò)ava程序的classpath中。
MongoDB的 java 驅(qū)動(dòng)包下載地址是:
???????https://github.com/MongoDB/mongo-java-driver/releases。
集算器 SPL 支持的語(yǔ)言包括:
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享名稱:協(xié)助MongoDB計(jì)算之本地化排序-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://www.rwnh.cn/article38/jdcpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、虛擬主機(jī)、網(wǎng)站維護(hù)、企業(yè)網(wǎng)站制作、電子商務(wù)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容