资讯专栏INFORMATION COLUMN

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

13651657101 / 2426人阅读

摘要:但查询出来的写过却并不是预想的为的文档排在前面,结果正好相反。由于平常用比较多所以在查询时自然想到但是并不能按照数字来排序字符串字段值,上面的集合中如果通过排序字符串值来得到想要的结果需要在个位数字前面补这样才能返回想要的排序结果。

最近在开发中遇到一个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)来进行类型转换。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18771.html

相关文章

  • (翻译) MongoDB(5) BSON类型

    摘要:类型数字别名注意已过时布尔日期正则表达式位整数时间戳位整数要确定字段的类型,请查看在中检验类型。是位整数,代表自纪元年月日以来的毫秒数。 BSON是一个用来存储文档的二进制序列化格式,并且可以在MongoDB中远程调用。该BSON规范位于bsonspce.org。 BSON在文档中支持下列数据类型作为值。每个数据类型都有相对应的数字和字符串别名用 $type 操作执行BSON类型来查询...

    KnewOne 评论0 收藏0
  • 开发者需要了解MongoDB知识点

    摘要:删除符合值为的第一条数据删除符合值为的所有数据值得一提的是,删除操作并不会改变的索引设置,即便删除了这个下的所有文档。因此这类批量执行指令是非原子性的。官方推荐使用前者。在设计数据模型时,要考虑根据不同情况选择适合的文档结构进行设计。 1. 基础概念 1.1 database 数据库,一个数据仓库可以包含多个集合 1.2 collection 集合,类似于关系数据库中的表。一个集合可以...

    MartinDai 评论0 收藏0
  • 开发者需要了解MongoDB知识点

    摘要:删除符合值为的第一条数据删除符合值为的所有数据值得一提的是,删除操作并不会改变的索引设置,即便删除了这个下的所有文档。因此这类批量执行指令是非原子性的。官方推荐使用前者。在设计数据模型时,要考虑根据不同情况选择适合的文档结构进行设计。 1. 基础概念 1.1 database 数据库,一个数据仓库可以包含多个集合 1.2 collection 集合,类似于关系数据库中的表。一个集合可以...

    chenatu 评论0 收藏0
  • Mongoose简要API

    摘要:是在环境下对进行便捷操作的对象模型工具因此,要使用,则必须安装环境以及数据库。使操作更简单便捷。找到记录,并且将递增,返回后的为之前的。这个属性很有用,对数字直接进行增减。,要返回的字段与的第二个参数一致。 Mongoose是在node.js环境下对mongodb进行便捷操作的对象模型工具 因此,要使用mongoose,则必须安装node.js环境以及mongodb数据库。mongoo...

    王岩威 评论0 收藏0
  • mongodb学习笔记

    摘要:用于存储布尔值真假。将一个值与二进制的元素的最低值和最高值相对比。可选,抛出异常的级别。在建立唯一索引时是否删除重复记录指定创建唯一索引。索引权重值,数值在到之间,表示该索引相对于其他索引字段的得分权重。 Robo 3T -< 可视化工具 http://blog.csdn.net/i_vic/ar... [Unit] Description=mongodb After=networ...

    lemanli 评论0 收藏0

发表评论

0条评论

13651657101

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<