赞
踩
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.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。