一、MongoDB简介及和关系型数据库比较
1、MongoDB是一种非关系型数据库,是用C++语言编写的。其特点是高性能、易部署、易使用,存储数据方便。
主要特性:
- 面向集合存储,易于存储对象类型数据;
- 支持动态查询,支持完全索引,包含内部对象
- 模式自由
- 支持主从复制、分布式和故障恢复
- 使用高效的二进制存储,包括大型对象
- 文件的存储格式未BSON(JSON格式的一种扩展)
2、MongoDB和关系型数据库对比
比较项 | MongoDB | Mysql/Oracle |
---|---|---|
表 | 集合collection | 二维表table |
表中的一行数据 | 文档document | 一条记录record |
表中字段 | 键key | 字段field |
字段值 | 值value | 值value |
灵活性和扩展性 | 高 | 差 |
- MongoDB和关系型数据库逻辑结构对比
比较项 | MongoDB | Mysql/Oracle |
---|---|---|
数据库 | database | database |
表 | collection | table |
表记录 | document | rows |
MongoDB和关系型数据库都有数据库的概念,然后MongoDB里面的集合对应关系型数据库里面的表的概念,但是MongoDB集合里面没有列、行、表的关联关系这些概念,这是和关系型数据库很大的不同之处,MongoDB中集合里面的一个文档document就相当于一条记录。
3、MongoDB名词解释:
- database ,就是一个数据库,一个MongoDB可以有多少数据库,每个数据库可以有自己的集合和权限,这和mysql等关系型数据库一样;
- collection,集合,就是一组文档的集合,类似于数据库中的表;
- document,文档,是MongoDB中的基本数据单元,类似于表中的一行数据,但是和mysql等关系型数据库表中的记录不一样,MongoDB是以key,value形式存储的,例如{“name”:“张三”,“mobile”:“13111111111”};
二、MongoDB安装
1、mongodb下载
MongoDB的安装很简单,只需去官网下载压缩文件,解压到自己计算机自定义目录里面,然后配置好环境变量即可。
官方下载地址: https://www.mongodb.com/try/download
根据自己的需要选择对应的系统和版本进行下载,MongoDB版本中,偶数表示正式版,奇数表示开发版本。
2、环境变量配置
- 下载完成开始安装,我下载的是zip压缩包,解压缩zip后重命名为mongodb-3.6.23,然后放到如下路径:D:\Java\mongodb-3.6.23
- 配置环境变量,此电脑–>右键–>属性,然后点击高级系统设置–>点击环境变量
然后点击系统变量中的新建
新建MONGODB_HOME环境变量,变量名为MONGODB_HOME,变量值为解压缩后mongodb所在的路径,这里为D:\Java\mongodb-3.6.23,然后点击确定
然后在系统变量中找到Path这一栏,点击编辑
然后在弹框中点击新建,输入框中输入%MONGODB_HOME%\bin,然后确定,对应之前的弹框也要全部点击确定
然后打开cmd命令框,输入mongo -version,能显示mongodb的版本信息,环境变量就配置成功了。
三、MongoDB启动和常用命令
1、启动mongodb
- 在D盘Java文件夹里面新建mongo_db文件夹,这个文件夹就是存放mondb存放数据文件的路径,然后打开一个cmd命令窗口,执行命令:mongod --dbpath D:\Java\mongo_db,这样就启动了一个mongodb服务了,就相当于数据库的服务端;
- 打开另外一个cmd命令行窗口,执行mongo命令就可以连接到本地刚刚启动的这个mongodb数据库了,也可以使用mongo ip:port方式连接,这个就相当于一个客户端;
注意:安装启动MongoDB数据库后,默认是【非授权模式】,也就是不需要任何权限验证,直接在命令窗口中输入 mongo 回车,就可以连接上了。
接下来就可以使用mongodb的命令了:
2、常用命令
命令 | 释义 |
---|---|
show dbs | 查看所有数据库 |
use 数据库名称 | 切换数据库,如果数据库不存在则创建 |
db | 查看当前所在数据库 |
db.stats() | 查看当前数据库详情 |
show collections | 查看数据库下的所有集合 |
db.createCollection(“user”) | 创建一个名为user的集合 |
db.集合名称.insert({“name”:“张三”,“age”:20})) | 向集合中插入一条数据,db.user.insert({“name”:“张三”,“age”:20})),mongodb的数据为key:value格式的 |
db.集合名称.remove({删除条件}) | 从集合中删除数据,db.user.remove({“age”:20}),表示从user集合中删除age=20的数据 |
db.集合名称.find({条件}) | 根据条件查询数据,db.user.find({“name”:“张三”},{“age”:20})表示查询user集合中name=张三并且age=20的数据 |
db.集合名称.findOne() | 返回第一条数据 |
db.集合名称.count() | 统计集合中的总数 |
db.集合名称.find().count() | 根据条件统计集合中的总数 |
db.集合名称.find().sort({age:1}) | 根据字段排序,1:升序,-1:降序 |
db.集合名称.find().skip(2).limit(3) | 分页查询,skip跳过第几条,limit查询多少条 |
db.集合名称.find({key:{$in:[val]}}) | in 查询db.user.find({age:{$in:[20]}}) |
db.集合名称.update(criteria,objNew,upsert,multi) | criteria:用于设置查询条件的对象,objNew:用于设置更新内容的对象,upsert:如果记录已经存在,更新它,否则新增一个记录,取值为0或1,multi:如果有多个符合条件的记录,是否全部更新,取值为0或1,比如 db.user.update({name:“张三”},{$set:{age:“30”}},0,1)) ,表示将user集合中符号name=张三的数据,将age修改为30 |
db.集合名称.find({$or:[{name:”user2”},{age:30}]}) | $or,相当于关系型数据库中的OR,例如查询name为user2或者age为3的文档 |
db.集合名称.find({$nor:[{name:”user2”},{age:3}]}) | 例如查询name不是user2,age不是3的文档 |
3、索引
mongodb中也有索引
命令 | 释义 |
---|---|
db.集合名称.ensureIndex({key:1}) | 创建普通索引,key就是要加索引的字段 |
db.集合名称.stats() | 查看索引相关情况 |
db.集合名称.find({key:value}).explain() | 查看查询计划 |
db.集合名称.dropIndex({key:1}) | 删除索引 |
db.集合名称.ensureIndex({key:1},{unique:true}) | 创建唯一索引 |
4、固定集合
- 固定集合特性:固定集合很像环形队列,如果空间不足,最早的文档就会被删除,为新的文档腾出空间。一般来说,固定集合适用于任何想要自动淘汰过期属性的场景,没有太多的操作限制。
db.createCollection(“name”,{capped:true,size:100000,max:100})
创建一个固定集合,size指定集合大小,单位为KB,max指定文档的数量。当指定文档数量上限时,必须同时指定大小。淘汰机制只有在容量还没有满时才会依据文档数量来工作。要是容量满了,淘汰机制会依据容量来工作。
5、账号密码和权限配置
因为MongoDB启动后默认是非授权模式,不需要账号密码就可以连接上,所以要自己配置账号密码和权限,然后启动mongodb的时候使用授权方式启动:mongod --dbpath D:\Java\mongo_db --auth,–auth表示客户端需要授权才能连接上数据库
- 创建一个超级管理员admin,授予root权限:
admin用户创建好之后,重新使用mongod --dbpath D:\Java\mongo_db --auth启动mongodb,然后打开一个cmd命令行窗口使用:mongo -u admin -p 123456连接mongodb,账号密码错误的话是不能连接上的
使用db.updateUser(“admin”,{pwd:“111111”})修改admin账号的密码,然后重新登陆看看
db.dropUser(“test”)删除用户 - 给指定的数据库配置账号
创建一个test1数据库,给test1数据库创建一个testAdmin账号
然后打开一个新的cmd命令行窗口,用我们刚刚创建的testAdmin账号登陆看看:
- 关于创建账号中role字段的属性说明
属性 | 说明 |
---|---|
root | 只在admin数据库中可用,超级账号,超级权限 |
read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
dbOwner | 在当前DB中执行任意操作 |
userAdmin | 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 |