配置和启动(6.0.2版本)
-
环境变量中系统变量中的Path中加入bin的地址
D:\MongoDB\bin
-
在data目录(bin的同级目录)下新建文件夹db(必须创建数据库文件的存放文件夹)
-
启动MongoDB服务
#找到db的目录 cd D:\MongoDB\data\db #执行命令 mongod --dbpath D:\MongoDB\data\db #启动后,浏览器访问,显示 It looks like you are trying to access MongoDB over HTTP on the native driver port. http://localhost:27017
-
配置MongoDB服务
# 1. 在data目录下新建文件夹log,存放日志文件 # 2. 在MongoDB根目录(bin所在目录)下,新建文件mongo.config # 3. 在mongo.config中写入 dppath=D:\Mongodb\data\db logpath=D:\Mongodb\data\log\mongo.log # 4. 用管理员身份找到 D:\Mongodb\bin 目录,输入命令(最后字符串即是服务名) mongod -dbpath "D:\Mongodb\data\db" -logpath "D:\Mongodb\data\log\mongo.log" -install -serviceName "MongoDB" # 5. 此时,MongoDB已经成为windows服务了,可以在服务列表(services.msc)查看 # 6. 此时,可以使用命令启动关闭服务了(需要在管理员方式下) net start MongoDB net stop MongoDB # 7. 删除服务 mongod --dbpath "D:\MongoDB\data\db" --logpath "D:\MongoDB\data\log\mongo.log" --remove --serviceName "MongoDB"
-
安装mongosh
# mongodb6.0以后做出了重大改变,mongodb已经不再默认为你安装shell工具,因此需要安装一个额外的shell,这个工具被称为mongosh https://www.mongodb.com/try/download/shell # 安装或者解压完成后,配置系统变量,将bin目录加入Path D:\MongoDB\mongosh-1.6.0-win32-x64\bin
简单使用
中文文档(4.2,对比着看吧):https://mongodb.net.cn/
-
在管理员方式下输入mongosh,进入mongoDB命令模式
# 命令行中显示 Current Mongosh Log ID: 6360b9726fb692b9c13d961d Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.0 Using MongoDB: 6.0.2 Using Mongosh: 1.6.0 ......
-
简单命令
# 显示所有数据库(新创建的数据库里面需要有数据才可以显示) show dbs # 显示当前正在使用的数据库 db # 切换至该数据库,如果数据库不存在,则创建数据库 use DATABASE_NAME # 插入数据(如果已经切换至数据库再使用此命令,就会创建collection,也就是mysql的表) db.DATABASE_NAME.insert({"键":"值"}) #################################### === 下方命令使用在已经切换至的数据库下 === #################################### # 删除当前数据库(似乎是只删除了数据) db.dropDatabase() # 显示当前数据库的集合 show collections show tables # show collections 命令会更加准确点 # 创建集合,类似mysql的表 db.createCollection("集合名", options) # options : 可选参数, 指定有关内存大小及索引的选项 ## capped : (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。 ## autoLindexId : 3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。 ## size : (可选)为固定集合指定一个最大值,即字节数。如果 capped 为 true,也需要指定该字段。 ## max : (可选)指定固定集合中包含文档的最大数量。 db.createCollection("test",{capped : true, size : 6142800, max : 10000}) # 删除当前数据库的集合 db.COLLECTION_NAME.drop() # 查看已插入文档 db.COLLECTION_NAME.find() # ...... # 其他的知识,如增删改查文档(即mysql的行)等,看其他文档,如菜鸟教程 https://www.runoob.com/mongodb/mongodb-tutorial.html
用户管理
默认情况下,MongoDB没有启用访问控制,因此没有默认用户或密码;所以需要我们在admin数据库中创建。
-
用户权限列表
Built-In Roles(内置角色): 1. 数据库用户角色:read、readWrite; 2. 数据库管理角色:dbAdmin、dbOwner、userAdmin; 3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 4. 备份恢复角色:backup、restore; 5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 6. 超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase) 7. 内部角色:__system # 具体介绍 # 要注意的是,这里面的read和write不是表面的读取数据和写入数据 read:提供读取所有非系统集合和system.js集合上的数据的功能 readWrite:提供read角色的所有特权以及修改所有非系统集合和system.js集合上的数据的能力 dbAdmin:提供执行管理任务的能力,例如与模式相关的任务,索引和收集统计信息。该角色不授予用户和角色管理特权 userAdmin:提供在当前数据库上创建和修改角色和用户的功能。由于该userAdmin角色允许用户向任何用户(包括他们自己)授予任何特权,因此该角色还间接提供了 对数据库或 集群(如果作用域为数据库)的超级用户访问权限admin clusterAdmin:提供最大的群集管理访问。这个角色组合由授予的权限clusterManager, clusterMonitor和hostManager角色。此外,角色提供了dropDatabase操作 readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限 readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限 userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 root:只在admin数据库中可用。超级账号,超级权限 # 数据库用户大类可细分为读read和读写readWrite两种角色,而每个角色拥有一定的权限,比如 readWrite 角色具有创建/删除集合、创建删除索引和集合CRUD等16种权限,跨数据库角色表示该角色不仅对某个数据库有指定的操作权限,还对实例中其他所有(用户创建的)的数据库都具备同样的权限,比如readWriteAnyDatabase,具备对所有数据库有readWrite权限。这里有个特例,就是给用户授权角色时,如果授权时指定的数据库是admin,则即使仅指定readWrite,也同样具备readWriteAnyDatabase角色,也就是说对admin具有readWrite角色,那么对其他数据库也具有
这篇文章感觉很不错:https://zhuanlan.zhihu.com/p/26468035
-
指定用户进入MongoDB
# 用户授权连接 mongo --authenticationDatabase admin -u user -p pwd # 连接后授权 mongosh db.auth('user','pwd')
-
创建用户
# roles : role 这里面放用户角色 db 指定可访问数据库(只在admin数据库中可用,只能指定admin) # 为某个数据库创建用户时,最好切换到该数据库 db.createUser( { user: "user1", pwd: "user1", roles: [ { role: "", db: "" }, { role: "", db: "" } ] } )
-
查看用户
# 查看用户列表 db.system.users.find() # pretty()格式化查看 db.system.users.find().pretty() # 查看指定用户 db.runCommand({usersInfo:"username"}) # 查看当前数据库下用户 show users
-
修改用户密码
db.changeUserPassword("user","pwd")
-
删除用户
db.system.users.remove({user:"username"})
图形化使用
可以使用Navicat,如果之前学过Mysql,这个使用起来很快
目前问题记录:
-
新建集合,直接保存:如验证等不知是干什么的,写了后会报错
-
在给一个用户设置了指定数据库权限后,图形化登录使用password模式需要验证数据库(admin不需要),需要使用这个指定的数据库,才可以连接成功