Name | Descripe |
---|---|
文档 | 文档是 MongoDB 中数据的基本单位,是一组有序键值的集合。类似于关系数据库中的一行行数据。通常以键—值对的形式存在于数据库中。一般情况键是字符串类型,区分大小写、并且不能包含重复的键(唯一性)。 |
集合 | 集合是一组MongoDB文档的组合,类似于关系型数据库(例如 MySQL)中的数据表。集合没有固定的结构,可以插入不同格式或类型的数据。 |
数据库 | MongoDB使用数据库对集合进行分组。一个MongoDB实例可以承载多个数据库,每个数据库有零个或多个集合。 |
数据类型 | 描述 |
---|---|
String | 字符串类型,是最常用的数据类型,不过在 MongoDB 中,只有 UTF-8 编码的字符串才是合法的 |
Integer | 整型,用于存储数值。根据您使用服务器的不同,整型可以分为 32 位或 64 位两种 |
Boolean | 布尔型,用于存储布尔类型的值(true/false) |
Double | 双精度浮点型,用于存储浮点型(小数)数据 |
Min/Max keys | 将一个值与 BSON 元素的最低值和最高值相对比 |
Array | 数组类型,用于将数组、列表或多个值存储在一个键中 |
Timestamp | 时间戳,记录文档修改或添加的具体时间 |
Object | 用于内嵌文档 |
Null | 用于创建空值 |
Symbol | 符号,该数据类型于字符串类型类似,不同的是,它一般用于采用特殊符号类型的语言 |
Date | 日期时间,用 UNIX 时间格式来存储当前日期或时间,您可以创建 Date 对象并将 date、month、year 的值传递给 Date 对象来指定自己的日期时间 |
Object ID | 对象 ID,用于创建文档的 ID |
Binary Data | 二进制数据,用于存储二进制数据 |
Code | 代码类型,用于在文档中存储 JavaScript 代码 |
Regular expression | 正则表达式类型,用于存储正则表达式 |
Object ID
Object ID 类似于关系型数据库中的主键 ID,在 MongoDB 中 Object ID 由 12 字节的字符组成,其中:
601e2b6b aa203c c89f 2d31aa
↑ ↑ ↑ ↑
时间戳 机器码 进程id 计数器
Timestamp
Timestamps(时间戳)类型用来在 MongoDB 的内部使用,与 Date 类型不同,Timestamps 由一个 64 位的值构成,其中:
在一个 MongoDB 实例中,时间戳是唯一的,而且主要在 MongoDB 内部使用,在应用开发中,您可以使用 Date 类型来定义时间日期。
Date
Date 类型是一个 64 位的对象,其中存放了从 Unix 纪元(1970.1.1)开始到现在经历的毫秒数,Date 类型是有符号的,负值则表示 1970.1.1 之前的时间。
在MongoDB中使用use命令来创建数据库,如果该数据库不存在,则会创建一个新的数据库,如果该数据库已经存在,则将切换到该数据库。使用use
命令创建数据库的语法格式如下:
use database_name;
例如,创建一个名字为mg_pp的数据库,使用如下命令:
use mg_pp;
# 出现如下语句,说明数据库创建成功
switched to db mg_pp
数据库创建成功后,您可以使用db
命令来查看当前选择的数据库,如下所示:
db;
# 输入db会显示当前选择的数据库
mg_pp
显示MongoDB中所有的数据库,使用如下命令:
show dbs;
# 这个命令只会显示MGDB中所有不为空的数据库,新创建的数据库中没有数据,故不显示
这个时候就需要向新创建的数据库中插入数据:
db.users.insertOne({ username : "panpan" , password : "123123"});
# 其中users是集合,类似于关系型数据库中的表
# 插入的json字符串,即是文档,对应关系型数据库表中的一行记录
插入数据之后,当我们再次执行show dbs;就会发现我们新创建的数据库了。
[
{
"empty": false,
"name": "admin",
"sizeOnDisk": 151552
},
{
"empty": false,
"name": "config",
"sizeOnDisk": 110592
},
{
"empty": false,
"name": "local",
"sizeOnDisk": 73728
},
# 这个就是新建的数据库 mg_pp
{
"empty": false,
"name": "mg_pp",
"sizeOnDisk": 8192
}
]
删除当前数据库的语法格式
db.dropDatabase();
要删除指定的数据库之前,需要先进入该数据库:
use test_delete_db;
# 删除数据库
db.dropDatabase();
# 检查是否删除成功
show dbs;
MongoDB创建集合(数据表)语句如下:
db.createCollection(name, options);
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | (可选)如果为 true,则创建固定集合,固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档,注意:如果该值为 true,则必须指定 size 参数 |
autoIndexId | 布尔 | (可选)如为 true,则自动在 _id 字段创建索引,默认为 false,注意:MongoDB 3.2 之后不再支持该参数 |
size | 数值 | (可选)为固定集合指定一个最大值,即字节数,如果 capped 为 true,则需要指定该字段 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量 |
使用show collections
命令或者show tables
命令来查看数据库中的集合
show collections;
show tables;
创建固定集合“mycol”,整个集合空间大小为 102400 KB, 文档最大个数为 1000 个
db.createCollection("mycol", { capped : true, size : 102400, max : 1000 } )
虽然 MongoDB 中提供了单独的创建集合的方法,但通常我们不需要手动创建集合,因为当您在插入文档时,MongoDB 会自动创建集合。
删除集合的语法如下:
db.collection_name.drop()
collection_name: 需要删除集合的名称
drop:不需要携带任何参数
使用insert()插入文档:
# 插入一条文档
db.users.insertOne({ username : "panpan" , password : "123123"});
# 批量插入文档
db.users.insertMany([
{ username : "panpan111" , password : "111"},
{ username : "panpan222" , password : "222"}
])
# 插入之后使用find()进行查看
db.users.find();
使用find()查询文档,语法如下:
db.collection_name.find(query, projection);
pretty() 方法来格式化查询到的结果:
db.collection_name.find(query, projection).pretty()
findOne()方法只能返回一个查询到的文档:
db.collection_name.findOne(query, projection)
投影操作
db.collection_name.find(query,{key1:1, key2:1, ...})
update() 方法用于更新现有文档中的值,其语法格式如下:
db.collection_name.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
save() 方法可以使用传入的文档来替换已有文档,若 _id 主键存在则更新已有文档,若 _id 主键不存在则作为新数据插入到集合中。
语法格式如下:
db.collection_name.save(
<document>,
{
writeConcern: <document>
}
)
delete() 方法从集合中删除文档,语法格式如下:
db.collection_name.delete(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
eg:
# 创建一些测试数据
db.course.insertMany([
{
title: 'MongoDB教程',
author: '编程帮',
url: 'http://www.biancheng.com/mongodb/index.html'
},{
title: 'HTML教程',
author: '编程帮',
url: 'http://www.biancheng.com/html/index.html'
},{
title: 'C#教程',
author: '编程帮',
url: 'http://www.biancheng.com/csharp/index.html'
}
])
# 删除title为“MongoDB教程”的文档
db.course.deleteOne({'title':'MongoDB教程'})