软件本地化,可让用户根据自己的语言环境、使用习惯来选择不同的语言版本,从而大限度提高使用体验。随着软件技术的进步,本地化能力得到广泛支持、不断向前发展,也成为软件成熟的重要标志。本文讨论的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 支持的语言包括:
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。