一、前言
本来在前言里面写了一堆数据库类型介绍、为什么要学习Mongodb
数据库等等,后来我又全删了,这种概念的东西看了也只能混个脸熟,即使明白了也过一阵子忘记了,只有真正用起来了才逐渐明白这些概念,如果刚一开始接触太多概念容易让人迷惑(因为我就这样…),实践出真知嘛。
二、准备
说一点,这篇文章重点是教你如何快速入门MongoDB,至于如何去安装它们不会花篇幅描述。
这里有一份官方的安装MongoDB的指南Install MongoDB,不过是英文的,你可以使用谷歌翻译。
另外一份官方文档,使用MongoDB Shell
连接数据库,mongo shell。
下面是我所安装的版本:
- MongoDB 4.2
- Studio 3T 2019.7.0
- Node 12.8.1
此外,我接下来所讲解的操作都是在MongoDB Shell
环境下进行的,如果需要在其他环境下进行需要安装或引入相关的驱动。当然为了方便,我在可视化工具下进行操作,因为可视化工具集成了MongoDB Shell
环境。
三、基本概念
虽然我提倡不接触那些晦涩难搞的概念,比如事务
,但接下来的概念你还是需要知道的!
3.1 Collection和Document
学过SQL
的同学应该知道,进行数据库操作有以下操作(略过登陆权限啥的):
- 创建数据库
- 建立视图
- 建表
- CRUD(增删改查)
上面每一步都需要输入相关的SQL
脚本去执行。但是在MongoDB
中不需要主动去创建数据,也不需要去建“表”,你只要直接在“表”中插一条数据,那么MongoDB
会帮你自动创建数据库和“表”,这是动态进行的,很灵活。这个“表”就是MongoDB
中的集合
(collection),表中每一条数据都被称为文档
。从这我们可以看出来,关系型数据库和非关系型数据库之间的一个区别了吧(当然我还是不会说太多)。
一张图来说明MongoDB
中数据库
、集合
、文档
之间的关系:
- DBMS:对应多个数据库
- Collection:一个数据库可以有很多集合(你也可以理解为“表”)
- Document:一个集合有多个文档(可以理解为一张表有很多数据项)
3.2 BSON
BSON是一种二进制序列化格式,用于在MongoDB中存储文档和进行远程过程调用。 BSON规范位于bsonspec.org
它的数据结构是一种类似JSON的数据结构,可以存储各种类型数据,比如二进制数据图像、视频等。特点如下:
- 自动识别类型
- 自动指定
_id
字段设置为主键,保证不重复 - 动态添加属性
- BSON字符串为UTF-8
搞前端的同学肯定明白了,这和JS的灵活性很像啊。连字段都可以动态加入,这也太牛逼了。
四、MongoDB操作
4.1 基本操作
在平时业务中,我们大部分的操作都是CRUD
操作,在此之前,先介绍几个基本操作,打开你的MongoDB Shell
或者 Studio 3T
点击Intelli Shell
都是一样的(个人推荐后者)。
4.1.1 显示所有数据库
show dbs
4.1.2 显示当前数据库
db
4.1.3 显示所有集合
show collections
4.1.4 删除某个集合
db.<collection>.drop()
4.1.5 删除数据库
db.dropdatabase()
4.1.6 使用某个数据库
use <dbname>
4.2 CRUD操作
上面多次提到了这个CRUD
,意思我们都知道了,英文单词就是下面四个:
- Create:创建文档
- Read:读取文档
- Update:更新文档
- Delete:删除文档
可以说这一小节无疑是最重要的一部分了,上面也提到过了,我们的业务大部分就是增删改查操作了。下面讲解这些命令的时候会有一部分是与SQL
的对比,这一部分来自官网(看了半天的英文…)。
以下示例均在数据库my_test
,集合students
中进行。
4.2.1 插入/创建 文档
(1) 插入一个或者多个文档
db.collection.insert(
<文档或文档数组>,
{
writeConcern:<文档>,
ordered:<boolean>
}
)
该方法接受两个参数,第一个参数就是要插入的文档,可以是一个对象表示插入一个文档,也可以是一个对象数组表示插入多个文档。第二个参数一般不需要写,是一些插入配置选项。插入后,会返回一个对象来表明插入的状态。返回的对象属性如下:
{
acknowledged: <boolean>,
_id: Array
}
下面要介绍的方法和上面的是一样的,只不过下面更加有语义化,推荐使用下方的方法。
(2)插入一个文档
db.collection.insertOne(
<文档>,
{
writeConcern:<文档>
}
)
(3)插入多个文档
db.collection.insertMany(
<文档或文档数组>,
{
writeConcern:<文档>,
ordered:<boolean>
}
)
比如我现在向students
集合中插入几个文档,
db.students.insertMany(
[
{
name: '老曹',
age: 22,
gender: '男',
address: '湘潭',
like: {
singers: ['中岛美雪', '黄家驹', '张国荣'],
books: ['你不知道的JavaScript', '吉他自学三月通', '小孩']
}
},
{
name: '老罗',
age: 24,
gender: '男',
address: '南宁',
like: {
singers: ['泰勒斯威夫特', '杨千嬅'],
books: ['高等数学', '初级日语', '挪威的森林']
}
},
{
name: '老陈',
age: 23,
gender: '女',
address: '株洲',
like: {
singers: ['陈奕迅', '林宥嘉'],
books: ['从你的世界路过', '顾城的诗']
}
},
{
name: '老吴',
age: 21,
gender: '女',
address: '铜仁'