前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mongodb $toInt如何实现数据类型的转化并完成排序

mongodb $toInt如何实现数据类型的转化并完成排序

原创
作者头像
Jacky-易小天
修改2024-01-19 19:28:00
1980
修改2024-01-19 19:28:00
举报
文章被收录于专栏:mongodb

使用场景

数据库中存的数据类型,不一定是前端需要的类型。比如,数据库中 学生collection(集合|表)

有身份证号码field(字段|列)为idCardNumber,为18位数字string

数据结构如下:

代码语言:ts
复制
student:{
    name:"jacky",
    idCardNumber:"620102199503025028"
}

需求:计算出学生的出生年月日,

知道身份证的构成是

11-12 位表出生再哪 一年

11-12 位代表出生的月份

13-14 位代表初日的那天

所以就可以根据身份证的信息算出该学生的出生年月日,那么怎样是用mongodb查询实现呢

请参考以下查询方式

代码案例

案例一:mongodb的聚合函数计算出年月日

代码语言:ts
复制
let aggregate=[
{
  payload:{$substr: ["$idCardNumber", 6, 8]},
  //$idCardNumber 含义是查询的字段,6代表的是从第几位开始截取 8,代表要截取几位
  brithYear:{
    $toInt:{
    //$toInt 是mongodb的类型转化工具
  		$substr:[{$substr: ["$idCardNumber", 6, 8]},0,4]
    }
  },
  brithMonth:{
    $toInt:{
  	$substr:[{$substr: ["$idCardNumber", 6, 8]},4,2]
		}
  },
  brithDay:{
  	$toInt:{
    $substr:[{$substr: ["$idCardNumber", 6, 8]},6,2]
   }
  },
}]
this.xxxModel.aggregate(aggregate)

*说明下,为啥6代表的第七位,因为stirng可以看作数组,索引位index位是从0开始的,请看 字符串与数组

toInt 只是其中一种类型转化指令,更多转化指令 请看 mongodb convert

案例二:mongodb的 $function计算出生年月日

代码语言:ts
复制
/**
 * specifications: The fields to
 *   include or exclude.
 */
{
  payload:{ $function:
               {
                  body: function(idCardNumber) {
                     return idCardNumber.substr(6,8)
                  },
                  args: [ "$idCardNumber" ],
                  lang: "js"
               }
            },
  brithYear:{
    $toInt:  { $function:
               {
                  body: function(idCardNumber) {
                     return idCardNumber.substr(6,4)
                  },
                  args: [ "$idCardNumber" ],
                  lang: "js"
               }
      }
  },
  brithMonth:{
     $toInt:  { $function:
               {
                  body: function(idCardNumber) {
                     return idCardNumber.substr(10,2)
                  },
                  args: [ "$idCardNumber" ],
                  lang: "js"
               }
      }
  },
  brithDay:{
  	 $toInt:  { $function:
               {
                  body: function(idCardNumber) {
                     return idCardNumber.substr(12,2)
                  },
                  args: [ "$idCardNumber" ],
                  lang: "js"
               }
      }
  },
  
}
//执行查询后的结果
{
payload:"19010321"
brithYear:1901
brithMonth:3
brithDay:21
}

当然这个用function可能就有些麻烦,如果要处理的数据很复杂要经过多次转化可以考虑这个方法

有疑问欢迎评论区留言

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用场景
  • 代码案例
    • 有疑问欢迎评论区留言
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档