MongoDB入门

简介

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({})

如果查询titleMongoDB入门的文章,可以指定titleMongoDB入门的文档

语法:db.postCollection.find({"title":"MongoDB入门"})

如果要查询authornameCerelise的数据,可以使用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作为数据存储引擎。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值