最近在开发中遇到一个mongo查询排序的问题,项目中一些高频访问的热数据是放在mongoDB里的,mongo支持很多像SQL一样的操作比如sort就对应于SQL的order by.

比方我们有一个集合来存放一些书籍信息,集合中有下面这些文档

{"_id" : "28041","title" : "Mysql入门","subtitle" : "","author" : "John Joe","cate_id" : "223","list_order" : "10",
}
......{"_id" : "28847","title" : "Node即学即用","subtitle" : "","author" : "Mike Wilson","cate_id" : "223","list_order" : "6",
}

上面集合中的list_order字段是用来控制书籍信息在列表中的现实顺序的,比方要查询cate_id 223下的所有书籍,并且把查询结果按list_order降序排列。

db.book.find({"cate_id" : "223"}).sort({"list_order" : -1});
但查询出来的写过却并不是预想的list_order为10的文档排在前面,结果正好相反。原因就是上面的集合中list_order的字段值都是字符串。

由于平常用Mysql比较多所以在查询时自然想到ORDER BY list_order DESC, 但是MongoDB并不能按照数字来排序字符串字段值,上面的集合中如果通过排序字符串值来得到想要的结果需要在个位数字前面补“0” 01,02,03,04,05,06,07,08,09,10,11 这样才能返回想要的排序结果。

另外也可以将list_order的值存储为整数类型

{"_id" : "28847","title" : "Node即学即用","subtitle" : "","author" : "Mike Wilson","cate_id" : "223","list_order" : NumberLong(6),
}

同样能得到倒序排列结果。

推荐采用第二种存储整型数值的方法,另外需要注意一些数据是从Mysql查出然后放到Mongo里去的,Mysql中存储的int字段值查询到程序里会变成数字字符串即 6 ==> "6" 所以才有了上面list_order值为"6"的情况, 所以如果需要保存为整型的数据,在save前都要用(int)来进行类型转换。

MongoDB查询时排序字段为int类型和string类型的区别相关推荐

  1. [转载] Python中int类型和string类型的相互转换

    参考链接: Python类型转换和类型转换 1.字符串转换成int a = '10' int(a) //十进制string转化为int, 10int(a, 16) //十六进制string转化为int ...

  2. oracle的int范围,oracle中int类型和number类型区别

    oracle中int类型和number类型区别 INT类型是NUMBER类型的子类型. 下面简要说明: (1)NUMBER(P,S) 该数据类型用于定义数字类型的数据,其中P表示数字的总位数(最大字节 ...

  3. 数据库中的字段varchar类型和char类型的区别?

    数据库中的字段varchar类型和char类型的区别? 目录 数据库中的字段varchar类型和char类型的区别?

  4. Java学习(4)—— 布尔类型、基本数据类型转换、基本数据类型和String类型的转换

    布尔类型 也叫Boolean类型,boolean只允许取true和false. boolean占一个字节. 适用于逻辑运算,流程控制语句. 有默认类型,是false.但是应该声明为成员变量或是静态变量 ...

  5. int类型和byte类型的强制类型转换

    今天在读<Java网络编程>这本书的第二章 流 时,看到书中有一个地方关于int强制转换为byte类型时应注意的地方.这个地方有点细节,不过就应该把这种细节把握住. 情况是这样的,讲到In ...

  6. int类型和number类型区别

    一句话:INT类型是NUMBER类型的子类型. 下面简要说明: (1)NUMBER(P,S) 该数据类型用于定义数字类型的数据,其中P表示数字的总位数(最大字节个数),而S则表示小数点后面的位数.假设 ...

  7. Java中Object转换为int类型或String类型

    一.判断Object的类型 下面是截取的一个判断Objec的类型,然后给Excel的单元格设置类型和添加值的操作: obj instanceof 类型 Object obj = entityMap.g ...

  8. Java基本数据类型和String类型的转化

    基本数据类型转String类型只需要 + ""即可,如下 public static void main(String[] args) {int n1 = 100;float n2 ...

  9. int类型和Integer类型数据的比较

    一.由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同). 例子1: Integer a ...

最新文章

  1. 算法 | 动画+解析,轻松理解「Trie树」
  2. R语言stringr包str_count函数计算字符串匹配个数实战
  3. ECSTORE 关于FILTER条件所代表的含义
  4. Ajax中文乱码问题解决方法(服务器端用servlet)
  5. 时序分析:隐马尔可夫模型
  6. java 消费者模式 多线程_[Java并发-24-并发设计模式] 生产者-消费者模式,并发提高效率...
  7. 访问iis出现500.21错误
  8. android 按键上报流程,input子系统详解,按键如何上报
  9. vc6.0编译c++程序后在vc2008中调试的技巧(符号信息和链接)
  10. sqlalchemy 常用数据类型有哪些?
  11. 汽车云智能采集服务 八爪鱼采集器在汽车行业网站的应用
  12. linux终端下如何分屏,ubuntu terminal 终端分屏
  13. 实战python网络爬虫豆瓣_三分钟教会你利用Python爬虫实现豆瓣电影采集(实战篇)...
  14. jquery操作表格 合并单元格
  15. uniapp小程序唤醒微信支付
  16. 在窗口程序中打开控制台
  17. git与gerrit基础概念
  18. python(pyqt5)多线程解决界面无响应
  19. Java SE 控制流程(今天本君不早朝)
  20. J2ME(cldc/midp)简介

热门文章

  1. linux C 编译时手动链接遇到的问题(未解决)
  2. LINQ to XML 编程基础
  3. 设置HighCharts,让它生成的图表居中显示。
  4. C++ static、const对象声明与定义 问题来源?
  5. 【BZOJ】3052: [wc2013]糖果公园 树分块+带修改莫队算法
  6. java 7 Reflection详解(二),获取class对象信息
  7. SAP Business One助力洛德集团实现巨大商业价值
  8. 交换机VLAN、 TRUNK 、VTP 配置
  9. 新年礼物 总算有服务器了
  10. xpath的一些测试