软件本地化,可让用户根据自己的语言环境,使用习惯来选择不同的语言版本,从而最大限度提高使用体验。随着软件技术的进步,本地化能力得到广泛支持,不断向前发展,也成为软件成熟的重要标志。本文讨论的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的代码如下:
排序排序时,可根据需要设置成不同的语言,实现对查询结果的排序。集算器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支持的语言包括: