您好,登錄后才能下訂單哦!
軟件本地化,可讓用戶根據自己的語言環境、使用習慣來選擇不同的語言版本,從而最大限度提高使用體驗。隨著軟件技術的進步,本地化能力得到廣泛支持、不斷向前發展,也成為軟件成熟的重要標志。本文討論的MongoDB本地化排序之路也是從無到有,一點點積累向前發展的。先前版本只能按照UNICODE編碼排序,而不是根據本地語言的編碼排序。后來版本增加了對本地化排序的支持,但它的前提是要在創建集合時進行語言設置,否則無效,而且對已經存儲了數據的集合也無效。通過集算器SPL語言結合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函數,無法按照拼音排序:
> 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 函數從 person 中取數,形成游標,過濾條件是空,指定鍵是 name 和 gender。SPL 的游標是分批讀取和處理數據,可以避免數據量過大,以防內存溢出。
A3:因為數據量不大,所以這里 fetch 出游標的所有記錄。
A4:關閉連接。
A5:使用 sort 按照字段 name 以中文拼音方式升序排序。
運行的結果如下:
????????
?????? sort排序時,可根據需要設置成不同的語言,實現對查詢結果的排序。集算器SPL也支持其他本地化語言,見后面說明。
?????? 需要說明的是:集算器esProc并不包含mongodb的java驅動包。用esProc來訪問mongodb,必須提前將mongodb的java驅動包(例如:mongo-java-driver-2.12.2.jar)放到集算器設置的外部庫目錄extLib\MongoCli下。
?????? 除了在集算器中直接計算,上述使用SPL協助mongodb計算的腳本也很容易集成到java中,只要增加一行,寫成return A5即可向java輸出resultset形式的結果,具體的代碼參考esProc教程。同樣,用java調用esProc訪問mongodb也必須將mongdb的java驅動包放到java程序的classpath中。
???????MongoDB的 java 驅動包下載地址是:
???????https://github.com/MongoDB/mongo-java-driver/releases。
???????集算器 SPL 支持的語言包括:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。