- MongoDB

>> MongoDB 4.x 下载、安装、配置

官方网站https://www.mongodb.com/
官方文档https://docs.mongodb.com/

~ 下载安装

1、下载安装https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/#considerations

2、点击下载的msi文件,选择custom安装,指定安装路径;

3、安装时注意:点击install之前的页面,要取消勾选install MongoDB compass,不安装可视化工具,勾选安装的话,安装会非常慢!
在这里插入图片描述

4、安装完成后,配置环境变量PathD:\MongoDB\MongoDB\bin

5、验证安装完成:cmd下输入mongo
在这里插入图片描述

~ 启动/停止 MongoDB 服务

要管理数据库,必须要先开启MongoDB服务;
MongoDB 4.x 安装完成后 直接将MongoDB服务写入到计算机的服务中,开机即启动MongoDB服务,可以直接打开客户端输入mongo直接使用,不需要每次使用前启动服务;

下面操作是针对3.x的:

1、从cmd启动MongoDB服务
(1)在D:\MongoDB\MongoDB\data目录下创建db文件夹;
(2)然后命令行下执行:mongod --dbpath D:\MongoDB\MongoDB\data\db
(3)若出现[initandlisten] waiting for connections on port 27017,说明数据库服务器启动成功;
(4)在浏览器中打开在浏览器中访问http://localhost:27017 ,页面中显示以下内容表示成功:It looks like you are trying to access MongoDB over HTTP on the native driver port
(5)服务启动成功后,再重新打开一个cmd窗口,输入mongo,作为客户端使用使用,来管理数据库;Ctrl+C结束使用;若要连接远程服务,输入mongo 127.0.0.1:27017
在这里插入图片描述

2、Start MongoDB Community Edition as a Windows Service:
Starting in version 4.0, you can install and configure MongoDB as a Windows Service during the install, and the MongoDB service is started upon successful installation.

To start/restart the service, you can use the Services Manager.

You can also manage the service from the command line. To start the MongoDB service from the command line, invoke the following command:

(1)Start the MongoDB service:Close all other command prompts, then invoke the following command:net start MongoDB

(2)Verify that MongoDB has started successfully:Check your MongoDB log file for the following line:[initandlisten] waiting for connections on port 27017
日志中有warning,可忽略;

(3)Connect to the MongoDB server:To connect to MongoDB through the mongo.exe shell, open another Command Interpreter:输入mongo

3、Stop MongoDB Community Edition as a Windows Service:
net stop MongoDB

4、Remove MongoDB Community Edition as a Windows Service:
To remove the MongoDB service, first stop the service and then run the following command:sc.exe delete MongoDB


>> MongoDB 用户权限管理

~ MongoDB 账户权限配置中常用的命令

1、show users:显示当前数据库中有哪些用户;

2、db.dropUser("用户名"):删除用户;

3、db.updateUser( "用户名",{pwd:"密码"}):修改用户密码;

4、db.auth("admin","password"):密码认证;
在这里插入图片描述

~ Mongodb 数据库角色

参考连接https://www.cnblogs.com/zzw1787044/p/5773178.html

1、数据库用户角色:read、readWrite;
2、数据库管理角色:dbAdmin、dbOwner、userAdmin;
dbOwner:对当前的数据库拥有所有权限;
3、集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4、备份恢复角色:backup、restore;
5、所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase;
6、超级用户角色:root

~ MongoDB 用户权限配置

1、创建超级管理用户: 超级管理员必须在admin库中创建;
在这里插入图片描述

2、第二步修改 Mongodb 数据库配置文件:D:\MongoDB\MongoDB\bin\mongod.cfg中添加security: authorization: enabled

3、重启 mongodb 服务:services.msc

4、用超级管理员账户连接数据库:mongo 数据库名 -u 用户名-p 密码
连接远程数据库mongo 192.168.1.200:27017/数据库名 -u user -p password

5、给指定数据库创建一个用户 只能访问当前数据库,不能访问其他数据库:
在这里插入图片描述


>> 概念

~ Sql 与 NoSql 对比

在这里插入图片描述

~ Documents 文档

MongoDB stores data records as BSON documents. BSON is a binary representation of JSON documents, though it contains more data types than JSON.

1、Document Structure:
MongoDB documents are composed of field-and-value pairs,The value of a field can be any of the BSON data types, including other documents, arrays, and arrays of documents. For example, the following document contains values of varying types:
在这里插入图片描述

>> MongoDB 常用命令

~ 创建/使用数据库、表、插入数据

1、show dbs:查看所有数据库列表;

2、use 数据库名:使用数据库/创建数据库;
(1)若数据库存在,直接使用数据库;若数据库不存在,则创建数据库;
(2)执行完此命令之后,数据库并没有创建成功,此时需要在该数据库中创建集合(表),没有专门创建集合的命令,要创建集合,只需要给集合中插入一条数据即可;
(3)数据插入成功之后,集合及创建完成,数据库也创建成功;
(4)对数据库执行任何操作之前,都要先执行这条命令,指定要操作的数据库;

3、db.表名.insert({"name":"zhangsan", "age":20}):向集合中插入一条文档(一行记录);
(1)若集合不存在,执行插入文档命令后,直接创建集合;
(2)数据已Json串的格式插入;

4、show collections:查看指定数据库中的所有集合;

5、db.dropDatabase():删除当前所在的数据库;

6、db.表名.drop():删除指定名称的集合; 数据库中所有集合都删除之后,数据库也随之删除了;

~ 查询表中数据

use 数据库名 -->db.表名.find(查询条件)

1、查询所有数据:
db.表名.find():不写查询条件,默认查询所有数据;

2、过滤查询:去掉重复记录;
db.表名.distinct("name");:查询 去掉指定列的重复记录 后的数据;会过滤掉 name 中的相同数据;

3、限定查询范围:
db.表名.find({"age":22}):查询 age = 22 的记录;
db.表名.find({"age":{$gt:22}}):查询 age > 22 的记录;
db.表名.find({"age":{$lt:22}}):查询 age < 22 的记录;
db.表名.find({"age":{$gte:22}}):查询 age >= 22 的记录;
db.表名.find({"age":{$lte:22}}):查询 age <= 22 的记录;
db.表名.find({"age":{$gte:23, $lte:26}}):查询 age >= 23 并且 age <= 26 的记录;

4、模糊查询:
db.表名.find({"name":/字符串/}):模糊查询名字中包含指定字符串的记录;

5、以指定内容开头的数据:
db.表名.find({"name":/^字符串/}):查询 name 中以指定字符串开头的记录;

6、指定要查询的列:
db.表名.find({}, {name:1, age:1}):查询指定列 name、age 的数据;
db.表名.find({age: {$gt: 25}}, {name:1, age:1}):查询指定列 name、age 数据, age > 25;
(1)只查询出指定的两列的值
(2)第一个参数{} 是查询条件,空表示查询所有记录;
(3) name 冒号后面也可以用 true 或 false表示,当用 ture 的情况下和 name:1 效果一样,如果用 false 就是排除 name,显示 name 以外的列信息;

7、排序:
db.表名.find().sort({age:1}):按照年龄排序, 1表示 升序, -1表示 降序;

8、组合条件查询: and、or
db.表名.find({name: 'zhangsan', age: 22}):按 and 组合,查询 name=zhangsan 和 age=22 的数据;
db.表名.find({$or: [{age: 22}, {age: 25}]}):按 or 组合,查询 age=22 或 age=25 的数据;

9、分页查询:
db.表名.find().limit(5):查询前五条数据;
db.表名.find().skip(10):跳过前10条数据,查询 10 条以后的数据;
db.表名.find().limit(10).skip(5):查询在 5-10 之间的数据;

10、统计记录数:
db.表名.find(查询条件).count():查询指定条件的结果集的记录条数;
db.users.find().skip(10).limit(5).count(true):返回限制之后的记录数量,要使用 count(true)或者 count(非 0);

~ 修改表中数据

1、db.表名.update({条件}, {$set:{"age":18}}):修改匹配指定条件的记录的age为18;

2、db.表名.update({条件}, {$set:{"age":18}}, {multi: true}):multi设置为true,表示更改所有匹配记录的age为18;

3、db.表名.update({条件}, {{"age":18}}):不写$set:,表示将第二个{}作为一条新的数据,替换要修改的整条数据;

~删除表中数据

1、db.表名.remove({限定条件}):删除匹配限定条件的所有记录;

2、db.表名.remove({限定条件}, { justOne: true }):只删除匹配限定条件的第一条记录;

~ 索引

索引 是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更快。MongoDB 的索引几乎与传统的关系型数据库一模一样;

1、查询当前集合索引:db.表名.getIndexes()

2、创建单一索引:db.表名.ensureIndex({"name":1})
(1)1表示name键的索引按升序存储,-1表示降序;

3、删除索引:db.表名.dropIndex({"name":1})

4、创建复合索引:db.表名.ensureIndex({"name":1}, "age":-1})
(1)复合索引被创建后,基于 username 和 age 的查询将会用到该索引,或者是基于 username 的查询也会用到该索引,但是只是基于 age 的查询将不会用到该复合索引;因此可以说,如果想用到复合索引,必须在查询条件中包含复合索引中的前 N 个索引列;
(2)若查询条件中的键值顺序和复合索引中的创建顺序不一致的话:db.表名.find({"age":24, "name":"zhang"});MongoDB可以智能的 在检索之前 动态的调整查询条件中的键值顺序,以使该查询可以用到刚刚创建的复合索引;

5、在创建索引时为其指定索引名:db.表名.ensureIndex({"username":1}, {"name":"userindex"})
(1)第二个参数用来指定索引的名称;

6、创建唯一索引:db.表名.ensureIndex({"username":1}, {"unique":true})
(1)第一个参数用来指定要设置所以的列,第二个参数用来为给列设置唯一索引;也可以为符合索引创建唯一索引;
(2)设置唯一索引之后,向集合中插入重复的文档时,MongoDB会报错;

7、后台创建索引:db.表名.ensureIndex({"username":1},{"background":true})
(1)如果在为已有数据的文档创建索引时,可以执行上面的命令,以使 MongoDB 在后台创建索引,这样的创建时就不会阻塞其他操作;但是相比而言,以阻塞方式创建索引,会使整个创建过程效率更高,但是在创建时 MongoDB 将无法接收其他的操作;

~ explain

1、查询具体的执行时间:db.表名.find().explain( "executionStats" ),查看explain.executionStats.executionTimeMillis 显示执行的时间;


>> MongoDB 的高级查询 aggregate 聚合管道

使用 聚合管道 可以对集合中的文档进行变换和组合;
db.表名.aggregate([{ ... }, { ... }], ... }

~ MongoDB 聚合管道操作符与表达式

管道操作符作为“键”,所对应的“值”叫做管道表达式;

例如{$match:{status:"A"}},$match 称为管道操作符,而 status:"A"称为管道表达式,是管道操作符的操作数(Operand);

每个管道表达式是一个文档结构,它是由字段名、字段值、和一些表达式操作符组成的;

sql管道操作符描述
select$project增加、删除、重命名字段
where/having$match条件匹配,只满足条件的文档才能进入下一阶段
limit$limit限制结果的数量
-$skip跳过文档的数量
order by$sort条件排序
group by$group条件组合结果 统计
join$lookup$lookup 操作符 用以引入其它集合的数据 (表关联查询)
sum()/count()$sum求和
常用表达式操作符描述
$addToSet将文档指定字段的值去重
$max文档指定字段的最大值
$min文档指定字段的最小值
$sum文档指定字段求和
$avg文档指定字段求平均
$gt大于给定值
$lt小于给定值
$eq等于给定值

~ MongoDB 聚合管道操作符详细使用

1、$project 修改文档的结构,可以用来重命名、增加或删除文档中的字段;
2、$match 用于过滤文档,用法类似于 find() 方法中的参数;

3、$sort$limit$skip
在这里插入图片描述

4、$group 将集合中的文档进行分组,可用于统计结果;
在这里插入图片描述

5、$lookup 表关联;
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值