MONGODB mongodb 一般人不知道的数据类型与使用

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共600人左右 1 + 2)。
MONGODB 在使用中,出现的问题比较少,不少开发者本身并不注意,大多数对于MONGODB 的数据类型的认知并不多,而我们在mongodb的运营中发现开发基本上就是在使用string 类型的方式。
String 类型
这是开发大多数最常用的格式,与JAVA 里面的数据类型一样,STRING 类型。这里MONGODB 的数据存储中使用BSON 通过UTF-8 来进行存储。
在这里有一些在MONGODB中的设计者,认为既然MOGNODB可以在键值方面每个document 的key value 都是自由的,那么如果我一个collection中的一部分是 string 类型,一部分是其他的类型,我们怎么来区别。实际上我们遇到了这样的问题。

db.test.find({"name":{$type:"string"}})

这样我们就可以查出,当前test collection中的所有name 是string类型的documents. 比如我们查询 string 里面的null

那么除了这些以外,还有开发经常忽略的一些数值类型,如 int , long 两种类型,而这两种的类型是有范围的,这里两种的类型会进行自动的切换,如果你的值超过int 会进入到 long 的类型中进行存储。
int| -2,147,483,648 to 2,147,483,647| 0 to 4,294,967,295 |long| -9,223,372,036,854,775,808 to | 0 to 18,446,744,073,709,551,615
9,223,372,036,854,775,807
插入相关的数据db.test.insertOne({age: -2147483648})
db.test.insertOne({age: -9223372036854775808})
db.test.insertOne({age: 4294967295 })
db.test.insertOne({age: 18446744073709551615})
db.test.insertOne({age: 28446744073709551615})
实际上我按照上面的范围进行插入数据,则这些数据的类型是double 而不是我们范围中的 INT LONG 等

写到这里问题就来了,我想使用INT 类型在MONGODB 中表达数据,怎么办,因为我们在怎么使用这个部分,结果都是DOUBLE
这就要求我们在写入数据的情况下,指定你的数据类型,如INT

> db.test.find({"age": {$type: "int"}})
{ "_id" : ObjectId("63c674c2d0c9b3cc56fc047b"), "age" : 18 }
>
> db.test.insertOne({age: NumberInt("19.03")})
{
"acknowledged" : true,
"insertedId" : ObjectId("63c67638d0c9b3cc56fc047c")
}
> db.test.find({"age": {$type: "int"}})
{ "_id" : ObjectId("63c674c2d0c9b3cc56fc047b"), "age" : 18 }
{ "_id" : ObjectId("63c67638d0c9b3cc56fc047c"), "age" : 19 }
如果你固定了使用的具体的数据类型,你输入的数据与类型不匹配,将被修改为你设定的类型。但是如果你超过你指定的数据类型的范围,那么输入的数据将变得是错误的数据,这点需要使用者注意。

> db.test.insertOne({age: NumberLong("10294967295")})
{
"acknowledged" : true,
"insertedId" : ObjectId("63c67775d0c9b3cc56fc0480")
}
> db.test.find({"age": {$type: "long"}})
{"_id":ObjectId("63c67766d0c9b3cc56fc047f"),"age":NumberLong("6294967295") }
{"_id":ObjectId("63c67775d0c9b3cc56fc0480"),"age":NumberLong("10294967295") }

所以官方文档说明的数据部分,可能你在理解上如果出现问题,会导致你的输入的数据的类型和你希望的类型是不一致,甚至你认为数据库可以进行维度的转换也是错误的。
这里就会出现一个核心的问题,你发现的mongodb 的collection 几经了不同的开发人员,一部分数据是 STRING 一部分是INT ,那么你该怎么办。
> db.test.update({}, [ {$set:{ "age" : {$toDouble: "$age"}}} ], {multi:true})
WriteResult({ "nMatched" : 17, "nUpserted" : 0, "nModified" : 9 })


但是如果是想转换成INT 则会报错,原因还是转换的值超过了INT的范围
这里有一个问题,关于MONGODB ,到底MOGNODB 是都使用STRING 类型好,还是应该使用MONGODB 自有的数据类型。可以去下面的连接来看看一些回答。
而MONGODB 的数据类型应该怎么用,这仅仅是一个开端,更深入的数据类型的研究还应该继续。

相关文章:
MONGODB mongodb 一般人不知道的数据类型与使用
开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…...
蚁群算法优化
%%%%%%%%%%%%蚁群算法解决 TSP 问题%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%% clear all; %清除所有变量 close all; %清图 clc; %清屏 m 50; %蚂蚁个数 Alpha 1; %信息素重要程度参数 Beta 5; %启发式因子重要程度参数 Rho 0.1; %信息素蒸发系数 G 20…...
山东首版次申报的材料
首版次软件基本知识: 1、 首版次高端软件的定义: 首版次高端软件是指省内企事业单位通过自主开发或者合作开发其功能或性能有重大突破 在该领域具有技术领先优势或者打破市场垄断拥有自主知识产权 尚未取得重大市场业绩的 同产品名称、同一版本号的软件产品。 2、主管部门:山…...
个人时间管理网站—首页的前端实现【源码】
🌟所属专栏:献给榕榕 🐔作者简介:rchjr——五带信管菜只因一枚 😮前言:该专栏系为女友准备的,里面会不定时发一些讨好她的技术作品,感兴趣的小伙伴可以关注一下~👉文章简…...
Python毕业设计推荐
今天给大家推荐4个基于python的毕业设计/课程设计 1 网上商城系统 这是一个基于pythonvue开发的商城网站,平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能…...
使用nodemon时报错:“无法加载文件...,因为在此系统上禁止运行脚本“;windows执行策略修改
报错内容如下图: Windows 系统会对全局安装的脚本进行一个限制,防止恶意脚本执行,所以此处会报错。 如何解决?通过修改 windows 执行策略来解决此问题。 一、什么是 windows 执行策略 Windows 给 PowerShell 设定了一个叫 “…...
网络协议分析期末复习(五)
目录 0.前言 1.PC和PPPOE服务器建立连接的流程以及包含LCP配置选项的PPP帧 -Discovery阶段 -Session阶段 -Terminate阶段 包含LCP配置选项的PPP帧如下 2.ARP的步骤以及过程中的具体ARP报文 Step1:查看路由表项以及本地的ARP缓存表 Step2:发送ARP…...
外贸找客户软件:Yellow Page Spider 8.7.1 Crack
黄页蜘蛛 |黄页提取器 从PAGINE GIALLE中提取数据,电子邮件,公司,协会,商业活动的电话! Yellow Page Spider 8.7.1对于那些在附近或任何意大利地点寻找商业活动、公司、协会、各种俱乐部的人来说,PagineGia…...
博客管理系统(前端页面设计)
文章目录一、预期效果二、博客列表页三、博客详情页四、博客登录页五、博客编辑页一、预期效果 博客登录页: 博客列表页: 博客详情页: 博客编辑页: 目录结构: 大家需要注意,我们下述代码的所有路径都…...
安装yolov5环境
当今世界上,深度学习技术在各个领域都有广泛的应用,因此掌握深度学习技术对于从事人工智能相关工作的人来说是非常重要的。而 YOLOv5 是一个非常流行的目标检测框架,本文将介绍如何在 Ubuntu 系统上安装 YOLOv5 环境。 1.安装 Anaconda Ana…...
IP 归属地查询 API 教你从0到1顺着网线找到键盘侠
写在前面 前一段时间,微博、头条、抖音、知乎等各大互联网平台相继推出了“个人主页、评论显示 IP 属地,用户不能自己开启或关闭”的功能,那么这些平台是如何获取到用户的 IP 地址呢? 本文将从 IP 归属地的技术原理、实际应用场…...
【K8S系列】深入解析Pod对象(二)
目录 序言 1.Volume 简单介绍 2 Projected Volume 介绍 2.1 Secret 2.1.1 yaml讲解 2.1.2 创建Pod 2.2 Downward API 2.2.1 yaml示例 2.2.2 Downward API 支持字段 3 投票 序言 任何一件事情,只要坚持六个月以上,你都可以看到质的飞跃。 在…...
从3千到3万,我的测试之路真的坎坷
其实测试行业未来发展之路是几乎所有关于软件测试工程师都会在意的话题,相信各位看官也很迷茫自己的发展路线。为了方便大家选择和比较,我也将我的经验和观点分享出来,以作参考。如果小伙伴们有更好的观点,欢迎分享和探讨…...
linux下使用system函数在程序中运行linux的shell命令
一、功能 linux下在程序中调用shell命令实现某个功能,比如拷贝命令cp 二、使用 添加头文件 #include <stdlib.h> 函数原型 int system(const char *command); 描述说明是system的调用过程: 使用fork创建一个子进程,子进程使用 execl 执…...
银行数字化转型导师坚鹏:银行业发展趋势及对人才的需求分析
数字化转型背景下银行业发展趋势及对人才的需求分析 ——洞察先机,重塑人才核心竞争力 课程背景: 数字化转型背景下,很多银行存在以下问题:不知道银行整体发展现状与发展趋势?不清楚金融科技对银行发展有什么影响&…...
NFS挂载
0、创建 mkdir /nfsdata mkfs.xfs /dev/vdb mount /dev/vdb /nfsdata 1、两边主机启动nfs服务 service nfs start 2、被挂载主机查看,文件系统是否可挂载 showmount -e 3、将被挂载主机,设置任何主机可挂载文件系统 vi /etc/exports /nfsdata (in…...
IDEA使用技巧
IntelliJ IDEA是一款流行的Java集成开发环境(IDE),它为开发者提供了许多有用的功能和工具来提高他们的工作效率和开发质量。直接使用IntelliJ IDEA就相当于节省了自己的时间,如果先使用其他编译器后来在使用IntelliJ IDEA会觉得非…...
自动化测试之一【接口测试总结】
本文主要分为两个部分:第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做?第二部分:…...
科大奥瑞物理实验——傅里叶光学
实验名称:傅里叶光学 1. 实验目的: 加深对傅里叶光学中的一些基本概念和基本理论的理解,如空间频率空间频谱和空间滤波和卷积等。通过实验验证阿贝成像理论,理解透镜成像的物理过程,进而掌握光学信息处理实质。通过阿…...
mysql count(*)的性能如何?
文章目录 为什么会出现这种情况呢?如何优化count(*)性能?增加redis缓存加二级缓存多线程执行减少join的表改成ClickHousecount的各种用法性能对比为什么会出现这种情况呢? 在Mysql中,count(*)的作用是统计表中记录的总行数。 而count()的性能跟存储引擎有直接关系,并非所…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
