简介
MongoDB是一个以文档为存储结构的数据库,文档是一种类似json的数据。
Mongodb是非关系型数据库(NoSQL),NoSQL有以下特点:
- 高可用 High Availability
- 高性能 High Performance
- 可伸缩 Scalability
现在的web应用大多的数据传递以传递json格式数据为主,那么直接传递json文档则显得更加直观,加上json数据格式是javascript原生支持的数据格式,所以用MongoDB和JavaScript书写的web应用可以无缝结合。
经过11年的发展,以MongoDB为代表的NoSQL解决了很多问题,比如增加了事务的支持,在查询时也添加了join支持。
目录
MongoDB存储结构
MongoDB最基本的存储结构是文档,多个同类型的文档组合为一个集合,多个集合组合为一个数据库,如果有学过关系型数据库,可以把集合当成表,文档当成表的记录。
BSON
BSON全称是Binary JSON,它的语法跟JSON几乎一模一样,只是支持的类型比JSON多,除了数字、布尔、数组等之外,还支持ObjectID、Double、Date等类型。
下载与安装MongoDB
MongoDB分为商业版和社区版,个人使用选择社区版。
Mac安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
安装完成后,进入终端,输入以下命令:
brew tap mongodb/brew
brew install mongodb-coummunity@4.2
Windows安装:
进入MongoDB官网,下载安装包:
网址:https://www.mongodb.com/download-center/community
版本 4.2.6
- 安装时勾选作为服务安装(Run service as Network Service user)
- 指定数据和日志文件的存放目录(Data & Log Directory)
启动MongoDB
MAC:
brew services start mongodb/brew/mongodb-community
为什么Windows没有演示?
由于在安装Windows版本的MongoDB时勾选了作为服务安装,这样设置会使MongoDB默认在后台运行,是不需要手动启动的。
连接MongoDB
Windows
在Windows下,可以使用安装目录中的mongo.exe来连接数据库
C:\Program Files\MongoDB\Server\4.2\bin\mongo.exe
Mac
在Mac下,在终端中输入mongo
即可连接
默认使用地址:
mongodb://localhost:27017
DB操作
添加数据库
使用use
命令,当数据库存在,使用use
命令即可指向该数据库;如果数据库不存在,则自动新建一个数据库。
语法:use
+数据库名字;
use myblog
输入db命令可以显示当前正在使用的数据库,以后做增删改查操作就用db对象来操作。
增删改查操作
在操作前,先了解一下MongoDB文档结构:
假如现在有个文档,它的结构如下:(博客系统应用)
文章
- title:标题
- author:作者
- createAt:创建时间
- content:内容
- comments:评论
假如这篇文章只有一个作者,作者的信息如下:
作者
- name:昵称
- avatar:头像
正常情况下,一篇文章往往有多条评论,结构如下:
评论
- Uesr:评论人昵称
- content:评论内容
根据以上结构,设计以下数据:
实际上这是一个简单的JavaScript对象
{
title:'MongoDB入门',
author:{
name:"Cerelise",
avater:"https://www.example.com/avatar.jpg"
},
createAt:"2020-05-22",
content:"MongoDB是文档为存储结构的数据库",
comments:{
{
user:"小明",
comment:"可以"
},
{
user:"小金",
comment:"赞"
},
{
user:"张三",
comment:"会写多写点"
}
}
}
添加数据
使用db.postCollection.insertOne()
命令,括号里添加写好的数据结构
postCollection是指我们所建集合的名字,同理,如果不存在此集合,MongoDB会自动创建。
db.postCollection.insertOne({
title:'MongoDB入门',
author:{
name:"Cerelise",
avater:"https://www.example.com/avatar.jpg"
},
createAt:"2020-05-22",
content:"MongoDB是文档为存储结构的数据库",
comments:[
{
user:"小明",
comment:"可以"
},
{
user:"小金",
comment:"赞"
},
{
user:"张三",
comment:"会写多写点"
}
]
})
创建成功后,会返回新添加文档的id,例如:
{
"acknowledged" : true,
"insertedId" : ObjectId("5ec8d5cbb3e7cde5b5068d92") //id是随机的
}
查询数据
要查询所有数据,可以使用find
方法,传递一个空对象;
语法:db.postCollection.find({})
如果查询title
为MongoDB入门
的文章,可以指定title
为MongoDB入门
的文档
语法:db.postCollection.find({"title":"MongoDB入门"})
如果要查询author
中name
的Cerelise
的数据,可以使用find
命令
给他传递的参数是一个对象,对象的查询是嵌套文档的属性,值是查询嵌套文档对应属性的值
语法:db.postCollection.find({"author.name":"Cerelise"})
注意,author.name
仍需要用双引号包住,.
后面的指对象的属性
更新数据
有两种方法:
- updateOne() - 更新一条数据
- updateMany() - 更新所有满足查询条件的数据
它们接收两个参数
- 第一个是查询条件,查询出想要修改的文档
- 第二个是要修改的属性,可以使用$set操作符来更新属性的值
比如把MongoDB入门
修改为MongoDB快速入门
:
语法:db.postCollection.find({ title:"MongdDB入门"},{$set{ title:"Mongo快速入门"}})
删除数据
与更新数据相似,有两种方法:
- deleteOne() - 删除一条数据
- deleteMany() - 删除所有满足查询条件的数据
它们接收一个参数
这个参数用来指定删除条件
比如删除MongoDB入门这个集合:
语法:db.postCollection.deleteOne({_id:ObectId("5ec8d5cbb3e7cde5b5068d92")})
这个值为MongoDB为数据集合自动生成的唯一标识
执行成功后,返回删除数据的数量
卸载MongoDB
又到了喜闻乐见的从入门到放弃环节,百度的安装教程版本太多,方法各不相同,很容易在使用中出现各种错误,所以要卸载以重新安装。
这里主要讲解安装在服务管理器中的Mongodb的卸载,如果不是服务管理器中的,直接删除目录即可,此时只要不删除data文件夹,数据库信息也不会丢失(所以在生产环境中,data的目录应该不要放在Mongodb文件夹中)。通过几个简单的命令即可完成Mongodb的删除。
先stop服务:
cmd下输入
sc stop mongodb
然后想彻底清除mongodb,需要delete服务
sc delete MongoDB
注意:这个服务名是在安装程序中定义的服务名称
然后再是软件的卸载,数据库删除。
总结
如果要查询MongoDB更多的用法,可以前往官方文档进行查询
https://docs.mongodb.com/manual/crud/
图形化工具 :Robo 3T
https://robomongo.org/
MongoDB适合应用于对性能要求比较高、但是对数据一致性要求比较低的的应用中,它创建集群、数据分区分片都很方便,只是这样可能导致不同replica
(也就是冗余的服务器)上的数据并不会保持一致。另外它存储的文档结构和操作语法都跟JavaScript接近,所以使用JS创建的应用可以首选MongoDB作为数据存储引擎。