MongoDB复合索引键排列规则疑问:数字键排序,字符串键不排序?
MongoDB复合索引键排列规则:数字键与字符串键的差异解析
核心原因:字段名类型的处理逻辑不同
- 数字类型字段名:MongoDB会将数字形式的字段名转换为字符串,并按数值大小升序自动调整索引键的顺序。你执行
db.coll.createIndex({4:1,1:-1},{unique:true})时,内部会把数字键转为"1"和"4",再按数值排序,最终索引键顺序变成{'1': -1, '4': 1}。 - 字符串类型字段名:MongoDB严格遵循你定义的索引键顺序,不会自动调整。所以
db.coll2.createIndex({'s':1, 'a':-1},{unique:true})的索引键顺序和定义完全一致。
补充说明
这是MongoDB基于BSON规范的设计逻辑:数字字段名在BSON中会被存储为字符串形式,MongoDB为了保持数字字段名的数值逻辑一致性,会在创建索引时自动按数值排序;而字符串字段名的排序规则由用户定义决定,因此不会干预顺序。你可以通过执行db.collection.getIndexes()命令查看索引的实际结构,确认键顺序。
内容的提问来源于stack exchange,提问作者intellectual
相关产品推荐
相关产品推荐

