赵渝强老师,MongoDB中都有哪些独特的数据类型?
摘要:作为文档型NoSQL数据库的典型代表,MongoDB提供了丰富的数据类型,主要有:ObjectId、String、Boolean、Number、Arrays、Object、Null、Timestamp和Date。下面通过具体的示例来演示其中
作为文档型NoSQL数据库的典型代表,MongoDB提供了丰富的数据类型,主要有:ObjectId、String、Boolean、Number、Arrays、Object、Null、Timestamp和Date。下面通过具体的示例来演示其中主要的数据类型以及它们的作用。
点击这里查看视频讲解:【赵渝强老师】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来表示数值类型的数据。下表列举了它们之间的区别。
下面通过几个具体的示例来演示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)指定下面的查询条件查询集合中的数据。
