MongoDB 3.4 Collation 特性解析

MongoDB 3.4 支持了 Collation特性,官方文档对这个特性的解释是

Collation allows users to specify language-specific rules for string comparison, such as rules for lettercase and accent marks.

简而言之,Collation特性允许MongoDB的用户根据不同的语言定制排序规则,举个例子,一个存储中国用户信息的集合。

db.createCollection("person")
db.person.insert({name: "张三"})
db.person.insert({name: "李四"})
db.person.insert({name: "王五"})
db.person.insert({name: "马六"})
db.person.insert({name: "张七"})

默认情况下,名字字段会被当做一个普通的二机制字符串来对比,按照name字段排序的结果如下

mongo-9554:PRIMARY> db.person.find().sort({name: 1})
{ "_id" : ObjectId("586b98980cec8d86881cffac"), "name" : "张七" }
{ "_id" : ObjectId("586b98980cec8d86881cffa8"), "name" : "张三" }
{ "_id" : ObjectId("586b98980cec8d86881cffa9"), "name" : "李四" }
{ "_id" : ObjectId("586b98980cec8d86881cffaa"), "name" : "王五" }
{ "_id" : ObjectId("586b98980cec8d86881cffab"), "name" : "马六" }

而对于中文名字,通常有按拼音顺序排序的需求,这时就可以通过collation来搞定

db.createCollection("person", {collation: {locale: "zh"}})
db.person.insert({name: "张三"})
db.person.insert({name: "李四"})
db.person.insert({name: "王五"})
db.person.insert({name: "马六"})
db.person.insert({name: "张七"})

此时再按name字段排序,则会按照locale指定的中文规则来排序

mongo-9554:PRIMARY> db.person.find().sort({name: 1})
{ "_id" : ObjectId("586b995d0cec8d86881cffae"), "name" : "李四" }
{ "_id" : ObjectId("586b995d0cec8d86881cffb0"), "name" : "马六" }
{ "_id" : ObjectId("586b995d0cec8d86881cffaf"), "name" : "王五" }
{ "_id" : ObjectId("586b995d0cec8d86881cffb1"), "name" : "张七" }
{ "_id" : ObjectId("586b995d0cec8d86881cffad"), "name" : "张三" }

MongoDB 3.4里,基本所有设计字符串字段排序的命令,都支持指定collation,比如「创建集合、创建索引、find」等;上述例子里在createCollection的时候指定了collation,则该集合里所有字符串默认都会按指定的collation来排序,如果只想针对某一个字段来指定collation,可以该字段创建指定collation的索引,例如

db.person.createIndex({name: 1}, {collation: {locale: "zh"}})

注意:如果是从3.2版本升级到3.4的,需要先执行如下命令才能使用collation特性

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
时间: 2024-07-31 16:47:30

MongoDB 3.4 Collation 特性解析的相关文章

云计算一周热文回顾:NoSQL数据库技术特性解析之文档数据库

NoSQL数据库技术特性解析之文档数据库 现今云计算的从业人员对NoSQL一词并不感到陌生,虽然很多技术人员都长期从事关系数据库的工作,但现在他们对NoSQL技术充满期待.对于企业来说,从关系型数据库到NoSQL数据库转变绝对是个需要深思熟虑的大改变.这涉及的不仅是软件的变化,更多的是对于数据存储上观念性的变化. 大多数非关系数据库都具有快速和可伸缩的特性.通过放弃关系存储模型和架构,关系数据库便可脱离由紧密结合的架构所带来对其施加的限制.应用程序也无需再链接数据库内表中的数据. MongoDB

移动搜索广告前景:手机搜索特性解析

文章描述:2012年谷歌的移动广告收入将高达45亿美元,较2011年的25亿美元上涨了80%.其中大多数移动广告收入均来自搜索,未来移动搜索广告前景大有可为,借着这个东风,研究了一下手机搜索的基本知识. 近年来移动互联得到了快速的发展,据国外高级互联网分析师吉蒙-蒙斯特(Gene Munster)称,2012年谷歌的移动广告收入将高达45亿美元,较2011年的25亿美元上涨了80%.其中大多数移动广告收入均来自搜索,未来移动搜索广告前景大有可为,借着这个东风,研究了一下手机搜索的基本知识. 手机

【整理】mongodb 3.2 新版本特性

mongodb 3.2 新版本特性  内存数据库(beta)  更加高的并发处理能力 更加短的响应时间 适用于:广告.金融.通信等行业: 2016 GA :  网传:mongodb 就是内存数据库?! 误区:mongodb 确实能够在某些场合下达到内存数据库的性能,因为 mongodb 会大量使用内存(默认会用掉所有的内存做缓存,以便把所有数据都放在内存中):但是 mongodb 会有很多落盘操作的,而纯粹的内存数据库是将所有落盘的行为都去掉了.  mongodb 的内存数据库引擎可以和其他引擎

AngularJs基本特性解析(一)_AngularJS

现在的前端项目中基本上都会用到angularjs框架,之前并不了解这个框架,也是因为最近接手的项目,所以打算好好的学习下它.之前都是搞pc端,现在接手的是移动端的项目,移动端UI框架用的是ionic+vordova,没有用bootstrap,主要做的是ios+安卓的app界面,ionic这个框架也不太了解,也需要花时间好好熟悉下.angularjs学习小白一枚,欢迎大神指正. AngularJs是什么? 简单来说,即javascript的一个框架,通过script标签添加到网页中.即我们使用an

NoSQL数据库技术特性解析之文档数据库

文档数据库-nosql数据库技术实战"> 现今云计算的从业人员对NoSQL一词并不感到陌生,虽然很多技术人员都长期从事关系数据库的工作,但现在他们对NoSQL技术充满期待.对于企业来说,从关系型数据库到NoSQL数据库转变绝对是个需要深思熟虑的大改变.这涉及的不仅是软件的变化,更多的是对于数据存储上观念性的变化. CouchDB专家兼作者Bradley Holt认为NoSQL并不是反SQL的运动,为对应的工作选择最恰当的工具才是正确的模式. 大多数非关系数据库都具有快速和可伸缩的特性.通过

《深入理解C++11:C++ 11新特性解析与应用》——1.4 C++特性一览

1.4 C++特性一览 接下来,我们会一窥C++11中的各种特性,了解它们的来历.用途.特色等.可能这部分对于还没有开始阅读正文的读者来说有些困难.如果有机会,我们建议读者在读完全书后再回到这里,这也是全书最好的总结. 1.4.1 稳定性与兼容性之间的抉择 通常在语言设计中,不破坏现有的用户代码和增加新的能力,这二者是需要同时兼顾的.就像之前的C一样,如今C++在各种代码中.开源库中,或用户的硬盘中都拥有上亿行代码,那么当C++标准委员会要改变一个关键字的意义,或者发明一个新的关键字时,原有代码

mongoDB简介及关键特性

mongoDB是一个介于关系数据库和非关系数据库之间的开源产品,是最接近于关系型数据库的NoSQL数据库.它在轻量级JSON交换基础之上进行了扩展,即称为BSON的方式来描述其无结构化的数据类型.尽管如此它同样可以存储较为复杂的数据类型.本文对其进行简要描述以及列出其关键特性. 一.什么是mongoDB 开源的NoSQL数据库 用于存储非结构化数据 SQL中的绝大多数操作有对应的方式来实现 采用BSON描述数据类型 二.有哪些逻辑概念 mongoDB与SQL数据库脚本上大同小异,常见的逻辑对象通

ELK 5.0.1+Filebeat5.0.1实时监控MongoDB日志并使用正则解析mongodb日志

    关于ELK5.0.1的安装部署,请参考博文( ELK 5.0.1+Filebeat5.0.1 for LINUX RHEL6.6 监控MongoDB日志), 本文重点说明如何适用filebeat实时监控mongodb数据库日志及在logstash正则解析mongodb日志.     部署完ELK5.0.1后,在需要监控mongodb日志的数据库服务器上部署filebeat来抓取日志, 首先需要修改filebeat配置文件: [root@se122 filebeat-5.0.1]# pwd

对象数据库系统与关系数据库间特性解析

本文针对众多网友关于对象数据库系统与关系数据库系统间的疑惑来详细分析. 面向对象数据库系统 面向对象数据库系统(Object Oriented Data Base System,简称OODBS)是数据库技术与面向对象程序设计方法相结合的产物. 对于OO数据模型和面向对象数据库系统的研究主要体现在:研究以关系数据库和SQL为基础的扩展关系模型:以面向对象的程序设计语言为基础,研究持久的程序设计语言,支持OO模型:建立新的面向对象数据库系统,支持OO数据模型. 面向对象程序设计方法是一种支持模块化设