当前位置:   article > 正文

MongoDB Collation 对字符串按照数值来排序_mongo numericordering

mongo numericordering

MongoDB 3.4 版本新增的一个特性:Collation 。
它的作用就是允许用户根据不同的语言定制排序规则

今天主要说说按数字字符串按数值来排序。数值字符串都是按首位排序的,例如:10 20 30 90 100 按正常字符串排序的话,你得到的是最大值是90而不是100。所以mongoDB有一个collation去定义排序规则是否按数字来排序。
查询例子:
db.getCollection(“document”).find(“field”:“1”).collation({“locale”:“zh”,numericOrdering: true }).sort({“field”:-1});

索引例子:
db.getCollection(“document”).createIndex({
field: NumberInt(“-1”)
},{name: “inx_field_collation”, collation: { locale: “zh”,numericOrdering: true } });
name是索引名称,collation就是你需要的排序规则,locale是必填的,我这里外加了一个numericOrdering属性,你可以根据自己的需要加不同的属性。好比我这加了numericOrdering创建的索引。
这个时候有一段这个查询就会不走索引
db.getCollection(“document”).find(“field”:“1”).collation({“locale”:“zh”});
但是这样会走索引
db.getCollection(“document”).find(“field”:“1”).collation({“locale”:“zh”,numericOrdering: true });
所以要看你定义的有什么属性就春创建什么样的索引.不创建所以文档大了后查询很慢。

collation属性:
{
locale: ,
caseLevel: ,
caseFirst: ,
strength: ,
numericOrdering: , //排序规则中文是否按数字排序
alternate: ,
maxVariable: ,
backwards:
}
具体的一些属性作用可以在官网查询
官网:https://www.mongodb.com/docs/manual/reference/collation/

后记:
3ef07f81-8f83-11eb-b53e-109836b608b3,3ef7f081-8f83-11eb-b53e-109836b608b3。
类似这种数据去查询的话,使用了locale:zh排序时找其中一个同时会找出另一个。
有个strength属性默认级别是3,可以设置级别为5,上面那种情况就可避免strength:5.
在这里插入图片描述

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号