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

chaunsin · · 3157 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

起因

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

正文

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

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


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


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

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


E类型的切片map


正确结果

总结

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


一个官方提供的文档

一个使用golang的码农...

完~


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:chaunsin

查看原文:go.mongodb.org bson.M{}使用排序的坑

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3157 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传