当前位置:   article > 正文

MongoDB 3.4 Collation 特性解析

mongodb 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的用户根据不同的语言定制排序规则,举个例子,一个存储中国用户信息的集合。

  1. db.createCollection("person")
  2. db.person.insert({name: "张三"})
  3. db.person.insert({name: "李四"})
  4. db.person.insert({name: "王五"})
  5. db.person.insert({name: "马六"})
  6. db.person.insert({name: "张七"})

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

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

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

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

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

  1. mongo-9554:PRIMARY> db.person.find().sort({name: 1})
  2. { "_id" : ObjectId("586b995d0cec8d86881cffae"), "name" : "李四" }
  3. { "_id" : ObjectId("586b995d0cec8d86881cffb0"), "name" : "马六" }
  4. { "_id" : ObjectId("586b995d0cec8d86881cffaf"), "name" : "王五" }
  5. { "_id" : ObjectId("586b995d0cec8d86881cffb1"), "name" : "张七" }
  6. { "_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" } )
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/287041
推荐阅读
相关标签
  

闽ICP备14008679号