当前位置: 首页 > news >正文

【赵渝强老师】MongoDB的数据类型

1

作为文档型NoSQL数据库的典型代表,MongoDB提供了丰富的数据类型,主要有:ObjectId、String、Boolean、Number、Arrays、Object、Null、Timestamp和Date。下面通过具体的示例来演示其中主要的数据类型以及它们的作用。

image.png
点击这里查看视频讲解:【赵渝强老师】MongoDB的数据类型

一、 ObjectId

ObjectId类似关系型数据库中的主键,MongoDB使用它可以唯一确定集合中的一条文档。ObjectId是一个BSON类型字符串,其中包含了时间戳、机器标识码、进程ID和随机数。因此在分布式环境下,使用ObjectId可以避免MongoDB主键的冲突。当向MongoDB集合中插入文档时,可以通过使用字段_id来指定ObjectId;如果没有指定ObjectId,MongoDB会自动生成ObjectId。

下面通过一个简单的示例来进行演示。
(1)使用mongoshell连接到MongoDB服务器端,并切换到scott数据库中。

$ mongo
test@nosql11 1> use scott

(2)创建一张名叫test1的新集合,并向集合中插入一条文档。

scott@nosql11 2> db.test1.insertOne({name:"Tom",age:25})# 输出的信息如下:
{"acknowledged" : true,"insertedId" : ObjectId("624a559df22c930516afc4e2")
}

(3)查询集合test1中的数据。

scott@nosql11 3> db.test1.find()# 输出的信息如下:
{ "_id" : ObjectId("624a559df22c930516afc4e2"), "name" : "Tom", "age" : 25 }# 由于在第(2)步插入文档时没有指定_id,MongoDB将会为插入的文档自动生成一个ObjectId。

二、 日期类型

在MongoDB中表示日期和时间可以通过Date和Timestamp两种不同的方式进行表示,MongoDB支持使用不同的方式来创建它们。下面通过具体的示例来进行演示。

(1)使用Date()插入一个字符串类型的时间数据。

scott@nosql11 5> Date()
Mon Apr 04 2025 10:37:19 GMT+0800 (CST)

(2)使用new Date()插入一个isodate类型的格林尼治标准时间数据。

scott@nosql11 6> new Date()
ISODate("2025-04-04T02:37:26.813Z")

(3)ISODate()与new Date()方式插入的时间数据类似。

scott@nosql11 7> ISODate()
ISODate("2025-04-04T02:37:35.642Z")

三、 数值类型

MongoDB中表示数值类型的数据时可以使用不同的方式。例如,使用Double表示浮点数;而使用Integer表示一个整数。下面的语句将向MongoDB的表中各插入一个Integer类型和Double类型的数据。

scott@nosql11 12> db.test1.insertOne({x1:1,x2:3.14});

MongoDB还支持使用NumberLong、NumberInt和NumberDecimal来表示数值类型的数据。下表列举了它们之间的区别。

2

下面通过几个具体的示例来演示MongoDB在存储数值类型数据时的区别。
(1)创建一张新集合test2,并向集合中插入下面的测试数据。

scott@nosql11 7> db.test2.insert([{_id:1,val:NumberDecimal('9.99'),Description:'Decimal'},{_id:2,val:9.99,Description:'Double'},{_id:3,val:10,Description:'Double'},{_id:4,val:NumberLong(10),Description:'Long'},{_id:5,val:NumberDecimal('10.0'),Description:'Decimal'}]);

(2)指定下面的查询条件查询集合中的数据。

scott@nosql11 8> db.test2.find({'val':9.99});# 输出的信息如下:
{ "_id" : 2, "val" : 9.99, "Description" : "Double" }# 条件{'val':9.99}将匹配Double类型的9.99;而不是NumberDecimal代表的9.99。

(3)如果要匹配NumberDecimal代表的9.99需要指定下面的查询条件。

scott@nosql11 9> db.test2.find({'val':NumberDecimal('9.99')});# 输出的信息如下:
{ "_id" : 1, "val" : NumberDecimal("9.99"), "Description" : "Decimal" }

(4)指定下面的查询条件查询集合中的数据。

scott@nosql11 10> db.test2.find({'val':10});# 输出的信息如下:
{ "_id" : 3, "val" : 10, "Description" : "Double" }
{ "_id" : 4, "val" : NumberLong(10), "Description" : "Long" }
{ "_id" : 5, "val" : NumberDecimal("10.0"), "Description" : "Decimal" }# 对于整个数字10的匹配,将匹配所有的数据类型10。

(5)指定下面的查询条件查询集合中的数据。

scott@nosql11 11> db.test2.find({'val':NumberDecimal('10')});# 输出的信息如下:
{ "_id" : 3, "val" : 10, "Description" : "Double" }
{ "_id" : 4, "val" : NumberLong(10), "Description" : "Long" }
{ "_id" : 5, "val" : NumberDecimal("10.0"), "Description" : "Decimal" }

四、 其他数据类型

对与MongoDB支持的其他几种数据类型,如String、Boolean、Arrays、Object,下面通过一个简单示例来进行演示。

scott@nosql11 12>  db.test3.insertOne({_id:'stu001',name:'Jone',married:false,age:18,courses:[{cname:'语文',credit:4},{cname:'英语',credit:3}]});# 其中:
# name:   表示姓名,是一个字符串类型的数据。
# married:表示是否结婚,是一个Boolean布尔类型的数据。
# age:    表示年龄,是一个数值类型的数据。
# courses:表示课程列表,是一个数组类型的数据。而数组中的每一个元素又是一个对象,包含课程的名称和学分。
http://www.gsyq.cn/news/125042.html

相关文章:

  • 《程序员修炼之道》阅读笔记8
  • 12月19日
  • 【题解】Luogu P3398 仓鼠找 sugar
  • 2025.12.19
  • P1657 选书
  • 2025年全空气供应商精选推荐,实现高效、舒适的空气解决方案 - 讯息观点
  • 汉默斯问鼎厨卫峰会双奖:中餐厨余处理器创新突围,以用户痛点锚定产业新坐标
  • 自己写的库:rstiff:高精度、类型保留的 Rust GeoTiff 处理库
  • 死锁
  • Java新特性-(二)Java基础语法 - 努力-
  • Java新特性-Java语法 - 努力-
  • 科华UPS电源优选服务商:河南艾佩斯20年深耕,全国服务覆盖 - 朴素的承诺
  • 小红书关键词爬取
  • 2025年口碑好的河南UPS电源厂家最新权威实力榜:河南艾佩斯商贸引领行业标杆 - 朴素的承诺
  • 实用指南:用VSCode打造高效AI开发环境:从配置到实战
  • 2025最新;福州奇富网络网络小额贷款有限公司客服AI数字公司推荐,技术斌能数字化转型 - 资讯焦点
  • 净水器加盟还是个好生意吗?是红利尾声还是新机遇?给创业者的理性指南 - 资讯焦点
  • 圆锥曲线的参数方程输入法 | Desmos 玩法系列01
  • 2025年敦煌徒步团队精选榜:聚焦敦煌徒步供应商安全体系与本土资源整合力! - 海棠依旧大
  • 解码Qt事件处理与自定义绘图
  • 2025年12月山东临沂全屋定制展推荐榜:临沂定制展、临沂板材展、临沂建博会、临沂门窗展、临沂门展、临沂木业展、临沂木博会,福瑞德会展领航十周年展,12 万㎡平台赋能家居产业链 - 海棠依旧大
  • 2025年12月深圳南油尾货推荐榜重磅出炉:南油服装尾货、高端尾货供应、尾货库存、服装库存、服装尾货全品类、高价一手回收、直播高价回收,健建服饰省心清仓优选 - 海棠依旧大
  • 2025年12月碳化硼行业优选厂家推荐榜:碳化硼/粉/陶瓷粉/球/喷嘴/防弹陶瓷、高丰度/高富集度/碳化/无压/热压/超细/高纯/碳化硼,硬核材料赋能高端制造,山东华恩值得关注 - 海棠依旧大
  • n8n整合ffmpeg
  • PHP利用Redis实战实录2:Redis扩展技巧和PHP连接Redis的多种强大的方案
  • 2025年12月湖北武汉洗浴汗蒸、汤泉水疗、足疗SAP、洗浴住宿酒店专业推荐 - 2025年品牌推荐榜
  • 2025年12月昆明肿瘤,云南恶性肿瘤,肿瘤病医馆推荐,专注肿瘤防治机构实力盘点! - 品牌鉴赏师
  • RAG 技术全栈指南 第二章学习笔记
  • 2025 GEO优化破局指南:AI原生时代的DeepSeek适配服务商精准遴选路径 - 品牌推荐排行榜
  • 2025决胜DeepSeek流量入口:GEO优化顶尖服务商全景指南与选型策略 - 品牌推荐排行榜