MongoDB

本文详细介绍了MongoDB数据库,包括其与传统数据库的区别、安装过程、客户端使用,以及用户管理。MongoDB是一个非关系型数据库,提供丰富的功能,支持数据查询、写入、索引管理和数据导入导出等操作。

MongoDB的介绍与安装

主要内容:(1)了解MongoDB数据库:MongoDB数据库与其他数据库的区别;
(2)安装MongoDB与客户端:安装MongoDB数据库,安装Robo 3T客户端
(3)掌握MongoDB用户管理:有哪些内置角色?如何创建用户?

1、(1)NoSQL数据库——NoSQL,泛指非关系型的数据库。随着Web2.0和Web3.0技术的兴起,传统关系型数据库无法应对如此巨大的数据存储和处理,所以非关系型数据库得以发展。

(2)MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的产品。数据表是不可以做表连接的,不可以把数据拆分到多张表保存
MongoDB用C++编写而成,性能良好,可以安装在多种系统上面

2、安装MongoDB与客户端:
(1)下载MongoDB: link.
(2)MongoDB服务:
MongoDB安装成功后,会在Windows系统上创建了服务
方法一:在图形界面启动或者关闭MongoDB服务:
在这里插入图片描述
方法二:命令行:在这里插入图片描述
(3)客户端:
1)命令行客户端:
在这里插入图片描述在这里插入图片描述
2)图形客户端:
Robo 3T是目前最好的可视化MongoDB客户端,而且是免费的;
Robomongo公司还提供了功能更强大的Studio 3T客户端,该软件为商业软件
a、下载Robo 3T: link
在这里插入图片描述

3、MongoDB用户管理:
默认情况下MongoDB是不需要账户就能登录使用的,但是为了数据安全,我们还是需要设置一个登录的账户
MongoDB内置了很多种用户角色,创建用户的时候需要分配角色
(1)内置角色:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)创建用户:
1)设置登录账户:
在这里插入图片描述
2)使用root登录:
在这里插入图片描述

MongoDB的基本操作

主要内容:
(1)数据的查询:表达式、条件查询、分页、排序、去除重复;
(2)数据的写入:添加数据、修改数据、删除数据;
(3)索引管理:创建索引、查看索引、删除索引

1、MongoDB的数据结构
MongoDB用BSON(二进制JSON)来保存数据。一条记录就是一个BSON,被称作文档
某些BSON聚集在一起,就形成了集合

2、管理逻辑库:
在这里插入图片描述

3、集合
(1)集合的管理:
在这里插入图片描述在这里插入图片描述

(2)添加记录:
集合的save函数允许我们添加一条或者多条记录:

db.student.save([
	{name:"李强",sex:"男", age: 24},
	{name:"刘倩",sex:"女", age: 23},
	{name:"赵婷婷",sex:"女", age: 24}
])

(3)主键值:
在集合中,文档之间都是松散,没有统一的字段约束。为了标识文档的唯一性,MongoDB为每一个文档都添加了主键字段(_id)
Objectld是一个12字节的BSON类型字符串
在这里插入图片描述

(4)时间戳
MongoDB存储日期会自动转换成格林尼治时区
Objectld字段里面包含了时间戳,所以我们可以提取记录保存的时间:

> ObjectId("56c56dd4ca446fab71e4c38a").getTimestamp()
> ISODate("2016 - 02 - 18T07 : 08 :04z")

4、查询记录
(1)条件查询:

find函数可以从集合中提取记录,参数为查询条件

db.student.find();
db.student.find({name: "李强", sex: "男"})
db.student.find({sex: "女", age: {$gte: 20}})

【注】:
在这里插入图片描述在这里插入图片描述
例:

db.student.find({name:{$in:["李强","赵婷婷"]}})
db.student,find({name:{$nin:["李强","赵婷婷"]}})
db.student.find({
	"name": {
		"$ne":"李强"
	}
});

正则表达式:
MongoDB支持正则表达式查找数据:

db.student.find({name: /^李/})
db.student.find({name:/^[a-zA-Z]{2,10}$/})

(2)分页查找数据:
可以利用skip()和limit()实现分页查询:

db.student.find().limit(10);
db.student.find().skip(20).limit(10);

(3)数据排序:
sort()函数可以用来对结果集排序。1代表升序,-1代表降序:

db.student.find().sort({name: 1})
db.student.find().sort({name: -1}).skip(10).limit(10)

(4)排除重复:
distinct()函数替代find()函数查找不重复的记录

db.student.distinct("name")
db.student.distinct("name").sort(function(){return -1})
db.student.distinct("name").slice(0,5)

5、数据的写入
(1)修改数据:
update()和updateMany()函数能实现对记录的修改:db.collection.updateMany({condition}, {$set:{ data }})

$unset:可以删除记录中的字段:db.student.updateMany({ },{ $unset : {city: 1,tel:1}})

$inc:对某个字段值做加法运算:db.student.updateMany( { }, { $inc : { age : 2 }})

$push:可以向数组属性添加元素
$pull:可以删除数组属性的元素

例:

db.student.update({name:"李强"}, {$set: {age: 26, classno:"2-6"}})
db.student.updateMany({sex : "男", age: {$gte: 25}}, {$set: {classno: "2-6"}})


db.teacher.update({name: "Jack"},{$push: {role: "教务主任"}})
db.teacher.update({name: "Jack"},{$pull: {role: "副校长"}})

(2)删除记录:
remove()函数可以删除记录

d.student.remove({})
db.student.remove({class:"6-2",sex:"男"})

6、数据索引

因为MongoDB中存放了大量的数据,所以为了加快数据检索速度,需要为集合设置索引:db.collection.createlndex( {key : 1}, options )
索引字段按照升序排列,属性值为1;降序排列属性值为-1

创建索引的案例:
因为创建索引的过程会阻塞MongoDB,影响其他增删改查操作,所以background参数代表在空闲得时候创建索引:

db.student.createIndex({name: 1})
db.student.dropIndexes()
db.student.createIndex({name: 1},{background: true})
db.student.getIndexes()

唯一性索引:
唯一性索引只能创建在每个记录都含有的公共字段上,在非公共字段上是不能创建唯一性索引的:

db.student.createIndex({sid: 1},{background: true, unique: true})

创建索引的原则:
数据量很大的集合必须创建索引,相反则不需要创建索引
集合的数据读取多过写入,则需要创建索引
给经常被当做查询条件的字段设置索引

数据的导入导出

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值