Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >mongodb $toInt如何实现数据类型的转化并完成排序

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

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

使用场景

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

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

数据结构如下:

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

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

知道身份证的构成是

11-12 位表出生再哪 一年

11-12 位代表出生的月份

13-14 位代表初日的那天

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

请参考以下查询方式

代码案例

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

代码语言:ts
AI代码解释
复制
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
AI代码解释
复制
/**
 * 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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端常用正则表达式
1. 身份证校验 const reg =/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}$)/; console.log(reg.test(320874199709084732)) 2. 根据身份证获取出生年月日 functio
执行上下文
2022/07/26
3320
详解正则表达式实现二代身份证号码验证[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/153620.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/14
1.2K0
使用正则表达式验证身份证号、QQ号、手机号、邮箱、地址、邮编、银行卡号、学号、车牌号、快递单号、验证码、ISBN号、网址、IPV4地址、IPV6地址、出生年月日、姓名
身份证号 正则表达式 // 正则表达式 身份证号18位 // 1-8{2} 身份证前两位代表省直辖市自治区 没有0和9 var isIdentityNum = /^[1-8]{2}[0-9]{4}[0-9]{4}((0[1-9]{1})|(1[0-2]{1}))((0[1-9]{1})|(1[0-9]{1})|(2[0-9]{1})|(3[0-1]{1}))[0-9]{3}[0-9xX]{1}$/; JavaScript代码 <!DOCTYPE html> <html> <head> <meta
是阿超
2021/10/15
7.2K0
ctfshow-web入门爆破
中年的出生年月日居然不给要自己爆破,这里可以通过检验身份证号码是否合理,筛选符合条件的身份证,可惜我的代码写的太烂,写出来的我自己都不敢看,这里就不贴了,放一个不用检验身份证号码合理性的代码吧(希望服务器没事……)
2020/11/23
1.4K0
ctfshow-web入门爆破
爱情36技之Bug大战
虫子在程序员心中是啥东西?虫子的学名为 Bug,是多少入了猿门的程序员,心中不愿提及的痛。消灭虫子的技能为 Debug,这项技能我敢保证:无论你是小白、大牛还是骨灰级的程序员,多多少少都需要进行修炼。
一猿小讲
2019/08/16
4290
爱情36技之Bug大战
[初探] proxy 的优势与使用场景
随着 vue3.x 的消息越来越多,proxy 的讨论也。相对于 Object.defineProperty ,proxy 有什么区别,有什么优势,以及可以应用在什么地方。该文章就简单的介绍下
守候i
2020/08/20
1.1K0
哈希表基本概念介绍及哈希冲突的处理方法(附源码)
  哈希表(散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希(散列)函数,存放记录的数组叫做哈希(散列)表。
嵌入式与Linux那些事
2021/05/20
9200
哈希表基本概念介绍及哈希冲突的处理方法(附源码)
PHP根据身份证号码验证、获取星座、生肖和性别函数
居民身份证,是用于证明持有人身份的一种法定证件,多由各国或地区政府发行予公民。并作为每个人重要的身份证明文件。首先介绍一下身份证含义 新的 18 位身份证号码各位的含义: 1-2 位省、自治区、直辖市代码; 3-4 位地级市、盟、自治州代码; 5-6 位县、县级市、区代码; 7-14 位出生年月日,比如 19670401 代表 1967 年 4 月 1 日; 15-17 位为顺序号,其中 17 位男为单数,女为双数; 18 位为校验码,0-9 和 X,由公式随机产生。 举例: 130503
沈唁
2018/05/24
2.6K0
二代身份证号码验证器[超简单]
第十八位的数字是根据ISO 7064:1983.MOD 11-2校验码算法计算出来的
全栈程序员站长
2022/09/14
1.4K0
C语言实例之身份证号获取生日性别
身份证号的第7-14位为出生年月日,比如19670401代表1967年4月1日;其中第17位(倒数第二位)男为奇数,女为偶数;18位为校验码,0-9和X,作为尾号的校验码。
程序员小顺
2021/10/13
5.6K0
字符提取函数合集
这一篇将用案例介绍 Left,Mid,Right,Len,Find 函数的使用 Left Mid Right 做了一个简单的示意图 Left函数表示从左边第1位开始,取6个字符 Mid函数表示从第7位开始,取8个字符,也就是中间7-14位字符 Right函数表示从右边第1位开始,取4个字符 最常用的案例就是从身份证号中获取出生年月日 以及判断性别 因为倒数第2位数字代表性别 奇数为男,偶数为女 (忘记这个规则的时候想想自己身份证倒数第2位数字并想想自己的性别) 提取年月日的函数这么写 =CON
但老师
2022/03/22
4710
字符提取函数合集
【Go】根据身份证(或生日)计算年龄
我们计算用户的年龄,当然只能根据用户的出生年月日信息来计算。这里我们定义:用户出生满1年后,年龄算1岁,不满1年算0岁,以此类推,大于1年不到2年算1岁。
后端码匠
2023/11/12
4850
使用多款AI开发延迟退休计算器
近日,延迟退休话题如同一颗重磅炸弹,在全网引发了热烈的讨论与广泛的关注。这一政策的出台,不仅关乎着每一位劳动者的切身利益,更是对国家经济社会发展具有深远的影响。于是我就想着用MarsCode、TX元宝、文心一言3.5、智谱清言、ChatGpt3.5等ai工具生成一套退休计算器。(讲实话,在某些情况下,代码自动补全还是挺好用,比如:写接口校验时自动提示,但是如果想要用这些工具直接生成完整代码,个人觉得生产力还是有待提升,闲话不多说,先看看各家ai输出,show their the code)
一起重学前端
2024/09/19
1980
浅谈正则表达式验证身份证号码(C# winform)
目前我国公民身份证号码由18位数字组成:前6位为地址码,第7至14位为出生日期码,第15至17位为顺序码,第18位为校验码。检验码分别是“0、1、2、……10”共11个数字,当检验码为“10”时,为了保证公民身份证号码18位,所以用“X”表示。虽然校验码为“X”不能更换,但若需全用数字表示,只需将18位公民身份号码转换成15位居民身份证号码,去掉第7至8位和最后1位3个数码。
全栈程序员站长
2021/08/12
1.6K0
vue前端js校验输入框中的身份证号-详细版
知识浅谈
2023/09/22
1K0
MongoDB开发系列-选定合理的数据类型
本篇介绍MongoDB数据库中常见的数字和时间数据类型使用场景,并给出最佳实践引导。
needrunning
2019/07/12
1.2K0
MongoDB开发系列-选定合理的数据类型
基于腾讯云大模型知识引擎×DeepSeek构建八字、六爻赛博算卦娱乐应用
随着DeepSeek的火爆,其强大的思维链让不少人越用越香,由于其缜密的思维和推理能力,不少人开发出了不少花里胡哨的玩法,其中一种就是以八字、六爻为代表的玄学文化正以“赛博玄学”的新形态席卷年轻群体。
zhouzhou的奇妙编程
2025/02/20
9324
Hive进行身份证合法性校验
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53893238
用户1148526
2019/05/25
3.1K0
C语言编程入门训练(二)
备注: 通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;通过printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。
RAIN7
2021/08/11
1.3K0
身份证号校验规则
中国居民身份证号码编码规则 第一、二位表示省(自治区、直辖市、特别行政区)。 第三、四位表示市(地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码)。其中,01-20,51-70表示省直辖市;21-50表示地区(自治州、盟)。 第五、六位表示县(市辖区、县级市、旗)。01-18表示市辖区或地区(自治州、盟)辖县级市;21-80表示县(旗);81-99表示省直辖县级市。 第七、十四位表示出生年月日(单数字月日左侧用0补齐)。其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。 第十五、十七位表示顺序码。对同地区、同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。 第十八位表示校验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,校验码如果出现数字10,就用X来代替,详情参考下方计算方法。
超级小可爱
2023/02/20
2.5K0
推荐阅读
相关推荐
前端常用正则表达式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档