MongoDB学习和使用

一. MongoDB介绍

(1).简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

(2).特点
高性能
易部署
易使用
非常方便的存储数据

(3)对比MySQL
目前环境下,只要对事务要求不高的业务都能被MongoDB所取代,属于及其热门的NoSQL数据库
在这里插入图片描述
(4).数据库结构
MongoDB属于NoSQL数据库,自然也是没有表相关概念的,该数据库存储使用的是集合,集合中存储的是文档(树状结构数据)
在这里插入图片描述

二.下载和安装

(1).现在MongoDB已经到了4.0版本,咱先去官网下载,下载地址,下载的版本信息如下,点击DownLoad就可以愉快下载啦。
在这里插入图片描述
根据安装包的提示操作,选择自定义安装,其中只安装服务端和客户端即可
在这里插入图片描述
在这里插入图片描述
最后千万不要勾选
在这里插入图片描述
(2).连接服务器
安装好后,默认会启动MongoDB服务器,可以在服务列表中找到MongoDB Server查看是否处于运行状态,已经处于运行状态则直接进入安装目录/Server/bin,运行mongo.exe,出现以下画面表示安装成功了
补充:MongoDB默认端口27017
在这里插入图片描述
在这里插入图片描述
可视化工具
Navicat,12版本支持mangoDB,所以可以下载一个最新的版本
在这里插入图片描述
在这里插入图片描述
有个14 天的试用期.
navicat12版本完整安装和激活请参考下面文章
navicat12版本完整安装和激活

三.基本操作

MongoDB的操作有很多,需要掌握更多技能的同学可以查询在线的文档,这里主要是讲这么去学习这个工具
在线文档教程:菜鸟教程

语法
show dbs: 查询所有数据库
use 数据库名: 创建并且选中数据库,数据库已经存在则直接选中
db: 查询当前选择的数据库
db.dropDatabase(): 删除当前选中的数据库
show collections: 查询当前库中的集合
db.createCollection(“集合名”): 创建集合
db.集合名.drop(): 删除集合
注意: db.集合名 == db.getCollection(“集合名”)

新建一个数据库
右键点击新建数据库
在这里插入图片描述
在这里插入图片描述

四.新增操作

(1)数据类型
在MongoDB中支持以下的数据类型

String(字符串): mongodb中的字符串是UTF-8有效的 
Integer(整数): 存储数值。整数可以是32位或64位,具体取决于您的服务器 
Boolean(布尔): 存储布尔(true/false)值 
Double(双精度): 存储浮点值 
Arrays(数组): 将数组或列表或多个值存储到⼀个键中 
Timestamp(时间戳): 存储时间戳 
Object(对象): 嵌⼊式⽂档 
Null (空值): 存储Null值
Symbol(符号): 与字符串相同,⽤于具有特定符号类型的语⾔ 
Date(⽇期): 以UNIX时间格式存储当前⽇期或时间 
Object ID(对象ID) : 存储⽂档ID 
Binary data(⼆进制数据): 存储⼆进制数据 
Code(代码): 将JavaScript代码存储到⽂档中 
Regular expression(正则表达式): 存储正则表达式

(2)语法:
往集合中新增文档,当集合不存在时会自动先创建集合,再往集合中添加文档,但是不要依赖自动创建集合的特性

db.集合名.insert( 文档 ) : 往集合中插入一个文档 
db.集合名.find(): 查询集合中所有文档

当操作成功时,集合会给文档生成一个_id字段,该字段就是文档的主键,也能在插入数据时自己指定该字段的值,但是不建议这样做

(3).实例:

//插入一个员工对象 
db.users.insert({id: NumberLong(1), name: "伊伊", age: NumberInt(18)}) db.users.insert({id: 2, name: "bunny", age: 20})

注意:直接写数字默认是Duble类型,其实在使用时是不影响的,仅仅只是类型问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五.更新操作

修改集合中已经存在的文档
(1)语法:

db.集合名.update( 
<query><update>{ 
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document> 
   } 
)

参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如 , , inc…)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是
false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别

简化语法:

简化方法: 
更新1个:db.集合名.updateOne( ... ) 
更新所有:db.集合名.updateMany( ... )

(2)实例:

//把一个带有name=丫丫的文档,修改其age值为30
 db.users.updateOne({name: "丫丫"}, {$set: {age: 30}}) 
 //修改所有name=丫丫的文档,修改其name=伊伊,age=20 
 db.users.updateMany({name: "丫丫"}{$set: {name: "伊伊", age: 20}})

在这里插入图片描述

六.删除操作

(1).语法:

db.集合名.remove( 
	<query>{ 
		justOne: <boolean>,
		 writeConcern: <document> 
	} 
)

参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别

简化方法:

删除1个:db.集合名.deleteOne( ... ) 
删除所有:db.集合名.deleteMany( ... )

实例:

//删除_id=xxx的文档 
db.users.deleteOne({_id: ObjectId("xxx")}) 
//这里的ObjectId类型可以不用指定,可以自动识别类型,如下:
db.users.deleteOne({_id: "xxx"}) 
//删除所有带有name=丫丫的文档 
db.users.deleteMany({name: "bunny"}) 
//删除当前数据库中所有文档 
db.users.deleteMany()

七.简单查询操作(分页和排序)

(1).基本查询:
语法:

db.集合名.find(query, projection)

参数说明:
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)

(2).排序查询:
语法:

db.users.find().sort({字段: 1}) -> 按照字段升序排列
db.users.find().sort({字段: -1}) -> 按照字段降序排列

(3).分页查询:
语法:

sikp(num): 跳过num个文档,相当于start 
limit(num): 限制显示num个文档,相当于pageSize 
如:db.users.find().skip(num).limit(num)

综合实例:
需求:按照年龄降序排列,查询第2页,每页显示3个
原始数据:
在这里插入图片描述
排序后结果:
在这里插入图片描述
对排序后结果做分页:

db.users.find().sort({age:-1}).skip(3).limit(3)

在这里插入图片描述

八.高级查询

高级查询在数据库中是经常使用的,在MongoDB中也同样是提供了高级查询的功能
(1).等值

语法 -> find({字段:})

(2).比较查询

语法 -> find({字段: {比较操作符: 值, ...}})

比较操作符
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
(!=) 不等 - $ne
集合运算 - KaTeX parse error: Expected '}', got 'EOF' at end of input: in 如:{name: {in: [“xiaoyao”,“bunny”]}}
判断存在 - KaTeX parse error: Expected '}', got 'EOF' at end of input: …ists 如:{name: {exists:true}}

(3).逻辑查询

语法 -> find({逻辑操作符: [条件1, 条件2...]})

逻辑操作符
(&&) 与 - $and
(||) 或 - $or
(!) 非 - $not

(4).模糊查询
MongoDB的模糊查询使用的是正则表达式的语法 如:{name: { r e g e x : / . ∗ k e y w o r d . ∗ regex: /^.*keyword.* regex:/.keyword./}}
实际上MongoDB也是不擅长执行模糊查询的,在实际开发中也是不使用的,该功能了解即可

实例.

需求1:查询所有name=伊伊的文档 
db.users.find({
	name:"伊伊"
})
需求2:查询所有name=yaya或者age>30的文档 
db.users.find({
	$or:[
		{name:"yaya"},
		{age:{$gt:30}}
	]
})
需求3:查询所有name含有ha并且30<=age<=32的文档
db.users.find({
	$and :[
		{name:{$regex: /^.*ha.*$/}},
		{age:{$lte:32,$gte:30}}
	]
})

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

九.设置用户

//1.选中admin数据库 
use admin 
//2.往里面添加一个超级管理员账号 
db.createUser({user:"root", pwd: "admin", roles:["root"]}) 
//user:账号 pwd:密码 roles:角色->root超级管理员

修改MongoDB的配置文件:安装目录/Server/bin/mongod.cfg

#约在29行位置,配置开启权限认证 
security: authorization: enabled

完成上面配置后重启服务器
在登录时就必须要输入密码,否则不能执行任何的命令
在这里插入图片描述
在这里插入图片描述
这样就可以正常登录了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值