当前位置: 首页 > news >正文

整理mongodb文档:collation

文章连接

整理mongodb文档:collation

看前提示

对于mongodb的collation。个人主要用的范围是在createcollection,以及find的时候用,所以本片介绍的时候也是这两个地方入手,对新手个人觉得理解概念就好。不要求强制性掌握,但是要看到的时候知道这个是什么意思。

关于Collation

先看一下官网中对于Collation的介绍

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

排序规则允许用户为字符串比较指定特定于语言的规则,例如大小写和重音标记的规则。

对于重音标记,指的是类似德语中的“ö”这样的,但我们项目比较少出现这样的,因此剩下的就是大小写的考虑了。

collation的参数

  locale: <string>,  caseLevel: <boolean>,caseFirst: <string>,    strength: <int>,    numericOrdering: <boolean>,    alternate: <string>,    maxVariable: <string>,    backwards: <boolean>

locale,指的是我们所选用的地区的代码,比如中国是zh,美国那边就是en,而当我们选用二进制的格式的时候,需要设置的是’simple’.当使用’simple’的时候,也就不再需要设置别的参数了。

strength,总共有五个挡位,当我们设置值为1跟2的时候,可以理解为不比较大小写,而当为3,4,5的时候可以理解为需要比较大小写。默认值是3,当然实际1与2,3-5之间都有差距,只是对我们来说差距不大。相当于越大越严格。

caseFirst,大小写的问题,数据的大小写谁在前,谁在后,当值为’upper’,大写排在小写前面,当值为’lower’,小写排在大写的前面。当值为’off’,表示关闭。

暂时的介绍就这些,其他的希望大家自己看,接下来是介绍两三个例子作为实操,先准备几条数据,分别是

{ "string": "a", "sort": "1" },
{ "string": "B", "sort": "2" },
{ "string": "C", "sort": "3" },
{ "string": "d", "sort": "4" }

接下来创建一个最基本的collection。尝试将这四个数据加进去。
在这里插入图片描述

对比了下查询出来的数据,我们插入的时候用的是sort按照1234的顺序插入的。但是当我们用sort({string:1})查询​数据的时候,返回的却是先大写,然后是小写。就是系统区分了大小写,先大写再小写,​这样子我们大概可以立即为根据二进制进行排序返回了。

接着删除这个collection,重新生成一个新的collection,但是使用下面的指令来生成

db
.createCollection("blog",
{collation:{ "locale": "en", strength : 1}})

接着继续重新插入数据,然后依旧是上面的查询数据
在这里插入图片描述

可以看到两次的查询语句都一样,但是出现了不同的结果,这是因为我们创造collection的时候,使用了不同的collation。
第一次使用的是默认的​locale=simple,根据二进制的规则,先大写后小写。
而第二次的时候,我们直接​无视大小写,也就出现了先a后B的情况。具体的应用场景还有很多​,只是这个最为经典,最适合做例子罢了。
在这里插入图片描述

同样的道理,当我们用一个既定的collation来查询一个数据的时候,我们也可以使用到特定的collation来查询。使用的方法如下:

db.blog.find()
.sort({string:1})
.collation({locale:'zh',strength:1})

最后

collation的最大作用是在让我们按照自己的规则来查询,创建集合,如果是做crud,需要做大小写区分的时候可以考虑这个,而不需要使用正则,但是注意下版本,一般​都是支持的。
​本文数据来源:mongodb官网

http://www.lryc.cn/news/109964.html

相关文章:

  • 【LangChain】Prompts之Prompt templates
  • 【数字IC基础】时序违例的修复
  • 深度学习实战46-基于CNN的遥感卫星地图智能分类,模型训练与预测
  • Node.js-fs模块文件创建、删除、重命名、文件内容的写入、读取以及文件夹的相关操作
  • LIN协议总结
  • Redis BigKey案例
  • ThinkPHP v6.0.8 CacheStore 反序列化漏洞
  • Spring 事务详解(注解方式)
  • 华为云waf 使用场景
  • ?.的写法 后缀修饰符
  • org.apache.hadoop.hive.ql.exec.DDLTask. show Locks LockManager not specified解决
  • Adaptive autosar 都有哪些模块?各有什么功能?
  • C++ 动态内存分配
  • 设计模式——面向对象的7大设计原则
  • 智慧防汛,数字科技的力量
  • “中国软件杯”飞桨赛道晋级决赛现场名单公布
  • JDBC处理批量数据提高效率
  • 使用css和js给按钮添加微交互的几种方式
  • react面试之context的value变化时,内部所有子组件是否变化
  • 使用okHttp不走代理问题
  • python moviepy 自动化音视频处理实践
  • 聊聊混合动力汽车和纯电骑车的优势和劣势
  • 算法训练Day39|62.不同路径 ● 63. 不同路径 II
  • react中hooks分享
  • LeetCode1207. 独一无二的出现次数
  • 【maven】构建项目前clean和不clean的区别
  • Stable Diffusion 硬核生存指南:WebUI 中的 CodeFormer
  • 从零开始理解Linux中断架构(24)软中断核心函数__do_softirq
  • 【云原生】Kubernetes中deployment是什么?
  • sk_buff操作函数学习