千家信息网

协助 MongoDB 计算之本地化排序

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,软件本地化,可让用户根据自己的语言环境、使用习惯来选择不同的语言版本,从而最大限度提高使用体验。随着软件技术的进步,本地化能力得到广泛支持、不断向前发展,也成为软件成熟的重要标志。本文讨论的Mongo
千家信息网最后更新 2026年11月01日协助 MongoDB 计算之本地化排序

软件本地化,可让用户根据自己的语言环境、使用习惯来选择不同的语言版本,从而最大限度提高使用体验。随着软件技术的进步,本地化能力得到广泛支持、不断向前发展,也成为软件成熟的重要标志。本文讨论的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 支持的语言包括:




排序 语言 数据 支持 驱动 拼音 版本 结果 软件 不同 二娘 代码 函数 游标 编码 公孙 宋江 李逵 武松 中文 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡豆 手磨咖啡 深圳市人人互联网科技有限公司 哈尔滨大商圈互联网科技有限公司 碳银互联网科技 卓越科技互联网 招聘 汉立互联网科技有限公司联系电话 广州优美互联网科技 济南华为互联网科技产业总部基地 创业天下互联网科技有限公司 湖南诚度互联网科技有限公司 苏州五指互联网络科技有限 未来五年的互联网科技 互联网科技和法律行业 威龙国际互联网科技公司 朱啸虎曾投资哪些互联网科技企业 科技赋能视角下互联网保险发展 深圳无忧互联网科技 普陀区互联网教育科技管理办法 网互联网络科技 互联网科技与金融科技 农村开互联网科技讲堂 科技与互联网哪个更好 互联网科技公司有风险吗 健康食品互联网创新科技园项目 畅思互联网科技 南京一网一红互联网科技有限公司 扫呗互联网科技有限公司 互联网科技收购价值 美国五大互联网科技公司市值多少
0