对于本地化语言(例如:中文),MongoDB是按照UNICODE编码排序,而不是根据本地语言的编码排序。用esProc结合MongoDB可以方便的实现本地化语言的排序(例如:中文按照拼音排序)。下面我们以中文为例,来看一下具体做法。 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" : "男" } …
用esProc协助MongoDB的脚本如下:
A1:连接MongoDB,ip和端口号是localhost:27017,数据库是test,用户名和密码都是test。如果需要其他参数的话可以按照mongo://ip:port/db?arg=value&…格式继续写参数。
A2:使用find函数从MongoDB中取数,形成游标。集合是person,过滤条件是空,指定键是name和gender。可以看出find函数和mongdb的find函数类似。esProc的游标是分批读取和处理数据,可以避免数据量过大,内存出现溢出的情况。
A3:因为数据量不大,所以这里fetch出游标的所有记录。 A4:使用sort按照name升序排序。排序所使用的语言是中文。集算器支持的其他本地化语言,见后。 运行的结果是: 需要说明的是:esProc并不包含MongoDB的java驱动包。用esProc来访问MongoDB,必须提前将MongoDB的java驱动包(要求2.12.2或以上版,如mongo-java-driver-2.12.2.jar)放到[esProc安装目录]commonjdbc中。 esProc协助MongoDB计算的脚本很容易集成到java中,只要增加一行A5,写成result A4即可向java输出resultset形式的结果,具体的代码参考esProc教程。同样,用java调用esProc访问MongoDB也必须将mongdb的java驱动包放到java程序的classpath中。 MongoDB的java驱动包下载地址是: https://github.com/MongoDB/mongo-java-driver/releases。 esProc支持的语言包括: ja_JP 日文 日本 es_PE 西班牙文 秘鲁 en 英文 ja_JP_JP 日文 日本 es_PA 西班牙文 巴拿马 sr_BA 塞尔维亚文 波斯尼亚和黑山共和国 mk 马其顿文 es_GT 西班牙文 危地马拉 ar_AE 阿拉伯文 阿拉伯联合酋长国 no_NO 挪威文 挪威 sq_AL 阿尔巴尼亚文 阿尔巴尼亚 bg 保加利亚文 ar_IQ 阿拉伯文 伊拉克 ar_YE 阿拉伯文 也门 hu 匈牙利文 pt_PT 葡萄牙文 葡萄牙 el_CY 希腊文 塞浦路斯 ar_QA 阿拉伯文 卡塔尔 mk_MK 马其顿文 马其顿王国 sv 瑞典文 de_CH 德文 瑞士 en_US 英文 美国 fi_FI 芬兰文 芬兰 is 冰岛文 cs 捷克文 en_MT 英文 马耳他 sl_SI 斯洛文尼亚文 斯洛文尼亚 sk_SK 斯洛伐克文 斯洛伐克 it 意大利文 tr_TR 土耳其文 土耳其 zh 中文 th 泰文 ar_SA 阿拉伯文 沙特阿拉伯 no 挪威文 en_GB 英文 英国 sr_CS 塞尔维亚文 塞尔维亚及黑山 lt 立陶宛文 ro 罗马尼亚文 en_NZ 英文 新西兰 no_NO_NY 挪威文 挪威 lt_LT 立陶宛文 立陶宛 es_NI 西班牙文 尼加拉瓜 nl 荷兰文 ga_IE 爱尔兰文 爱尔兰 fr_BE 法文 比利时 es_ES 西班牙文 西班牙 ar_LB 阿拉伯文 黎巴嫩 ko 朝鲜文 fr_CA 法文 加拿大 et_EE 爱沙尼亚文 爱沙尼亚 ar_KW 阿拉伯文 科威特 sr_RS 塞尔维亚文 塞尔维亚 es_US 西班牙文 美国 es_MX 西班牙文 墨西哥 ar_SD 阿拉伯文 苏丹 in_ID 印度尼西亚文 印度尼西亚 ru 俄文 lv 拉托维亚文(列托) es_UY 西班牙文 乌拉圭 lv_LV 拉托维亚文(列托) 拉脱维亚 iw 希伯来文 pt_BR 葡萄牙文 巴西 ar_SY 阿拉伯文 叙利亚 hr 克罗地亚文 et 爱沙尼亚文 es_DO 西班牙文 多米尼加共和国 fr_CH 法文 瑞士 hi_IN 印地文 印度 es_VE 西班牙文 委内瑞拉 ar_BH 阿拉伯文 巴林 en_PH 英文 菲律宾 ar_TN 阿拉伯文 突尼斯 fi 芬兰文 de_AT 德文 奥地利 es 西班牙文 nl_NL 荷兰文 荷兰 es_EC 西班牙文 厄瓜多尔 zh_TW 中文 台湾地区 ar_JO 阿拉伯文 约旦 be 白俄罗斯文 is_IS 冰岛文 冰岛 es_CO 西班牙文 哥伦比亚 es_CR 西班牙文 哥斯达黎加 es_CL 西班牙文 智利 ar_EG 阿拉伯文 埃及 en_ZA 英文 南非 th_TH 泰文 泰国 el_GR 希腊文 希腊 it_IT 意大利文 意大利 ca 加泰罗尼亚文 hu_HU 匈牙利文 匈牙利 fr 法文 en_IE 英文 爱尔兰 uk_UA 乌克兰文 乌克兰 pl_PL 波兰文 波兰 fr_LU 法文 卢森堡 nl_BE 荷兰文 比利时 en_IN 英文 印度 ca_ES 加泰罗尼亚文 西班牙 ar_MA 阿拉伯文 摩洛哥 es_BO 西班牙文 玻利维亚 en_AU 英文 澳大利亚 sr 塞尔维亚文 zh_SG 中文 新加坡 pt 葡萄牙文 uk 乌克兰文 es_SV 西班牙文 萨尔瓦多 ru_RU 俄文 俄罗斯 ko_KR 朝鲜文 韩国 vi 越南文 ar_DZ 阿拉伯文 阿尔及利亚 vi_VN 越南文 越南 sr_ME 塞尔维亚文 黑山 sq 阿尔巴尼亚文 ar_LY 阿拉伯文 利比亚 ar 阿拉伯文 zh_CN 中文 中国 be_BY 白俄罗斯文 白俄罗斯 zh_HK 中文 香港 ja 日文 iw_IL 希伯来文 以色列 bg_BG 保加利亚文 保加利亚 in 印度尼西亚文 mt_MT 马耳他文 马耳他 es_PY 西班牙文 巴拉圭 sl 斯洛文尼亚文 fr_FR 法文 法国 cs_CZ 捷克文 捷克共和国 it_CH 意大利文 瑞士 ro_RO 罗马尼亚文 罗马尼亚 es_PR 西班牙文 波多黎哥 en_CA 英文 加拿大 de_DE 德文 德国 ga 爱尔兰文 de_LU 德文 卢森堡 de 德文 es_AR 西班牙文 阿根廷 sk 斯洛伐克文 ms_MY 马来文 马来西亚 hr_HR 克罗地亚文 克罗地亚 en_SG 英文 新加坡 da 丹麦文 mt 马耳他文 pl 波兰文 ar_OM 阿拉伯文 阿曼 tr 土耳其文 th_TH_TH 泰文 泰国 el 希腊文 ms 马来文 sv_SE 瑞典文 瑞典 da_DK 丹麦文 丹麦 es_HN 西班牙文 洪都拉斯
|