一. 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: {/}}
实际上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
完成上面配置后重启服务器
在登录时就必须要输入密码,否则不能执行任何的命令
这样就可以正常登录了.