go.mongodb.org bson.M{}使用排序的坑

起因

今天一位朋友问了我一个问题 他说多字段排序有问题 乱序 而我也是模棱两可 最后自己做了一个测试 记在这里 深化了一下学习成果。

正文

使用排序时不能使用bson.M{}去排序否则排序结果是和预期结果有差异的

原因:底层的结构是Map结构 在golang中map值是无序的 而排序是根据字段值的先后顺序优先级进行排序 所以排序取值的时候就是乱序的 所以会造成乱序


测试使用元数据
已经明确提示


已经明确提示
黄色框为 非预期值

既然是无序的那么我们弄成有序的,恰好jdk已经为我们提供了方法 只需要换成bson.D{}即可, 至于原理底层是切片类型。


E类型的切片


正确结果

总结

bson.M{}进行排序不是不可以使用,在只有一个字段排序的情况下还是能使用的。当大于等于两个字段值以上的时候就会有乱序的问题了,还有在使用bson.M{}的时候对数据的顺序无关紧要的情况下也可以使用, 比如在使用bson.M{}的情况下插入数据对document顺序无关紧要的情况下可以使用。另外在使用多个document构成的复合索引的时候,需要保证索引字段的顺序,不然会造成索引不命中等问题。


一个官方提供的文档

一个使用golang的码农...

完~

你可能感兴趣的:(go.mongodb.org bson.M{}使用排序的坑)