操作monogdb
mongodb中有三个默认的库,admin管理库,config配置库,local本地库,这三个库不要删除修改
还有一个test库,登录到mongodb中,默认进入test库
db 命令获取当前所在数据库名称
创建临时库的方法use tmp,如果不在临时库中操作,那么退出登录时,临时库会被删除。如果在临时库中建立集合,则临时库会永久保存下来
演示示例
use tmp
db.collection.insert({name:'张三'})
show dbs
use tmp
db.collection.find()命令种类
数据库对象库(database),表(collection),行(document)
db.命令
DB级别命令
db.[TAB] 类似于linux的tab功能
db.help() db级别的命令使用帮助
库的操作
db.tmpdb
db.dropDatabase()
集合的操作
db.createCollection('b')
db.collection.insert({name:'张三'})
db.stu.insert({id:101,name:'张三',age:20,gender:'m'})
db.stu.insert({id:102,name:'lisi'})
db.stu.insert({a:'b',c:'d'})
db.stu.insert({a:1,c:2})文档操作
for (i=0;i
查询文档数量
db.log.count()
查找所有数据,按默认每页显示20条文档
db.log.find()
设置每页条数
DBQuery.shellBatchSize=50
查找所有数据,按页显示
db.log.find()
db.log.find({uid:999})
查找第一条数据
db.log.findOne()
查询去掉当前集合中某列的重复数据
db.log.distinct("name")
查找uid为999的文档,并格式化打印
db.log.find({uid:999}).pretty()
删除集合中所有记录
db.log.remove({})
集合中索引+数据压缩存储之后的大小,单位为字节
db.log.totalSize()用户及权限管理
配置验证前权限之前,需要在/mongodb/conf/mong.conf追加如下配置
security:
authorization: enabled
重启mongodb,输入密码后,重启成功
systemctl restart mongod.services
验证库: 建立用户时use到的库,在使用用户时,要加上验证库才能登陆。
对于管理员用户,必须在admin下创建.
建用户时,use到的库,就是此用户的验证库
登录时,必须明确指定验证库才能登录
通常,管理员用的验证库是admin,普通用户的验证库一般是所管理的库设置为验证库
如果直接登录到数据库,不进行use,默认的验证库是test,不是我们生产建议的.
从3.6 版本开始,不添加bindIp参数,默认不让远程登录,只能本地管理员登录。
用户验证信息,除了用户名,密码,还包括使用的数据库名称
Authentication Options:
-u [ --username ] arg username for authentication
-p [ --password ] arg password for authentication
--authenticationDatabase arg user source (defaults to dbname)
--authenticationMechanism arg authentication mechanism
--gssapiServiceName arg (=mongodb) Service name to use when authenticating
using GSSAPI/Kerberos
--gssapiHostName arg Remote host name to use for purpose of
GSSAPI/Kerberos authentication
用户创建语法基本语法说明
role表示权限范围,root代表超级管理员,readWrite代表可读写,read代表可读,dbAdmin仅代表可以对数据库操作
user:用户名
pwd:密码
roles:
role:角色名
db:作用对象
role:root,readWrite,read,dbAdmin
登入方式验证用户
mongo -u root -p root 192.168.255.101/admin
以超管理登入后验证用户及密码
db.auth('root','root')
创建管理员用户
管理所有数据库(必须 use admin再去创建)
db.createUser(
{
user:"root",
pwd:"root",
roles:[ { role:"root", db:"admin" } ]
}
)
##########返回值如下############
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
未指定验证库,显示登录失败
[mongod@base ~]$ mongo -uroot -proot 192.168.255.101
MongoDB shell version v3.6.12
connecting to: mongodb://192.168.255.101:27017/test?gssapiServiceName=mongodb
2020-06-23T18:54:08.689+0800 E QUERY [thread1] Error: Authentication failed. :
connect@src/mongo/shell/mongo.js:263:13
@(connect):1:6
exception: connect failed
指定验证库登录,显示登录成功
[mongod@base ~]$ mongo -uroot -proot 192.168.255.101/admin
MongoDB shell version v3.6.12
connecting to: mongodb://192.168.255.101:27017/admin?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c00e255a-f3d6-4b89-9d51-33a6e52ce870") }
MongoDB server version: 3.6.12
> show dbs;
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
创建对app数据库,读写权限的用户app
超级管理员登录
mongo -uroot -proot admin
选择一个验证库
use app;
创建用户
db.createUser(
{
user:"app",
pwd:"app",
roles:[ { role:"readWrite", db:"app" } ]
}
)
超经管理员做验证,返回1说明创建成功,退出超管
db.auth('app','app')
使用普通用户登录
可以对app数据库执行创建表,删除表,插入删除数据操作,没有权限使用其他数据库
mongo -uapp -papp 192.168.255.101/app
创建只读用户
超级管理员登录
mongo -uroot -proot admin
选择一个验证库
use readonly;
创建用户
db.createUser(
{
user:"readonly",
pwd:"readonly",
roles:[ { role:"read", db:"readonly" } ]
}
)
创建数据
db.stu.insert({name:"zhangsan"})
超经管理员做验证,返回1说明创建成功,退出超管
db.auth('readonly','readonly')
使用普通用户登录
只能对readonly数据库执行查询操作,没有其他权限操作数据库
mongo -ureadonly -preadonly 192.168.255.101/readonly
查询mongodb中的用户信息
使用超级管理员登录
mongo -uroot -proot 192.168.255.101/admin
use admin
查询所有用户信息
db.system.users.find().pretty()
返回值解释
{
"_id" : "admin.root", #库.用户名
"user" : "root", #用户名
"db" : "admin", #库
"credentials" : { #加密算法
"SCRAM-SHA-1" : {
"iterationCount" : 10000,
"salt" : "TMeyV16nLfpJ/+T6ybj4BQ==",
"storedKey" : "yOaGmidV3cQLWlowqHgiuYzTCVw=",
"serverKey" : "sj/ih9b4jXuZqiSqt9xzY1jOIVs="
}
},
"roles" : [
{
"role" : "root", #角色
"db" : "admin" #库
}
]
}
删除用户
使用超级管理员登录
mongo -uroot -proot 192.168.255.101/admin
use admin
删除指定用户
db.dropUser('readonly')