协助MongoDB计算之本地化排序

  

软件本地化,可让用户根据自己的语言环境,使用习惯来选择不同的语言版本,从而最大限度提高使用体验。随着软件技术的进步,本地化能力得到广泛支持,不断向前发展,也成为软件成熟的重要标志。本文讨论的MongoDB本地化排序之路也是从无到有,一点点积累向前发展的。先前版本只能按照UNICODE编码排序,而不是根据本地语言的编码排序。后来版本增加了对本地化排序的支持,但它的前提是要在创建集合时进行语言设置,否则无效,而且对已经存储了数据的集合也无效。通过集算器SPL语言结合MongoDB进行操作则可以方便实现本地化语言的排序(例如:中文按照拼音排序),实现起来也非常容易。下面就用中文例子进行说明:


集保合人存了姓名和性别如下:
在db.person.find ()
{" _id ": ObjectId (“544 e4e070f03ad39eb2bf498”),“名字”:“宋江”、“性别”:“男”}
{" _id ": ObjectId (“544 e4e070f03ad39eb2bf499”),“名字”:“李逵”、“性别”:“男”}
{" _id ": ObjectId (“544 e4e070f03ad39eb2bf49a”),“名字”:“吴用”,“性别”:“男”}
{" _id ": ObjectId (“544 e4e070f03ad39eb2bf49b”),“名字”:“晁盖”,“性别”:“男”}
{" _id ": ObjectId (“544 e4e070f03ad39eb2bf49c”),“名字”:“公孙胜”,“性别”:“男”}
{" _id ": ObjectId (“544 e4e070f03ad39eb2bf49d”),“名字”:“鲁智深”,“性别”:“男”}
{" _id ": ObjectId (“544 e4e070f03ad39eb2bf49e”),“名字”:“武松”,“性别”:“男”}
{" _id ": ObjectId (“544 e4e070f03ad39eb2bf49f”),“名字”:“阮小二”,“性别”:“男”}
{" _id ": ObjectId (“544 e4e070f03ad39eb2bf4a0”),“名字”:“杨志”,“性别”:“男”}
{" _id ": ObjectId (“544 e4e070f03ad39eb2bf4a1”),“名字”:“孙二娘”,“性别”:“女”}
{" _id ": ObjectId (“544 e4e070f03ad39eb2bf4a2”),“名字”:“扈三娘”,“性别”:“女”}
{" _id ": ObjectId (“544 e4e080f03ad39eb2bf4a3”),“名字”:“燕青”、“性别”:“男”}

直接用MongoDB的排序函数,无法按照拼音排序:
在db.person.find({},{“名称”:1、“性别”:1、“_id”: 0}) .sort({“名称”:1})
{" name ": "公孙胜”,“性别”:“男”}
{" name ": "吴用”,“性别”:“男”}
{" name ": "孙二娘”,“性别”:“女”}
{" name ": "宋江”、“性别”:“男”}
{“名称”:“扈三娘”,“性别”:“女”}
{“名称”:“晁盖”,“性别”:“男”}
{" name ": "李逵”、“性别”:“男”}
{“名称”:“杨志”,“性别”:“男”}
{“名称”:“武松”,“性别”:“男”}
{" name ": "燕青”、“性别”:“男”}
{“名称”:“阮小二”,“性别”:“男”}
{“名称”:“鲁智深”,“性别”:“男”}

使用集算器SPL的代码如下:

协助MongoDB计算之本地化排序”> <br/> </p> <p> <br/> </p> <p> A1:连接MongoDB,连接字格式为mongo://ip:港口/db ? arg=value&…。<br/> A2:使用找到函数从人中取数,形成游标,过滤条件是空,指定键是名字和gender.SPL的游标是分批读取和处理数据,可以避免数据量过大,以防内存溢出。<br/> A3:因为数据量不大,所以这里提取出游标的所有记录。<br/> A4:关闭连接。<br/> A5:使用排序按照字段名称以中文拼音方式升序排序。<br/>运行的结果如下:<br/> <img src=

排序排序时,可根据需要设置成不同的语言,实现对查询结果的排序。集算器SPL也支持其他本地化语言,见后面说明。


     需要说明的是:集算器esProc并不包含mongodb的java驱动包。用esProc来访问mongodb,必须提前将mongodb的java驱动包(例如:mongo-java-driver-2.12.2。jar)放到集算器设置的外部库目录extLib \ MongoCli下。


  除了在集算器中直接计算,上述使用SPL协助mongodb计算的脚本也很容易集成到java中,只要增加一行,写成回报   A5即可向java输出resultset形式的结果,具体的代码参考esProc教程。同样,用java调用esProc访问mongodb也必须将mongdb的java驱动包放到java程序的类路径中。


mongodb的java驱动包下载地址是:https://github.com/MongoDB/mongo-java-driver/releases

集算器SPL支持的语言包括:


协助mongodb计算之本地化排序”> <h2 class=协助MongoDB计算之本地化排序