query
查询某个字段是否存在
1 | db.course.find( { "lectures.lectures_count": { $exists: true } } ) |
update
1 | db.standard_input.updateMany({},{$rename:{{"caculate":"calculate"}}) |
index
1 | db.standard_input.createIndex({"m_id":1}) |
command
- 导出数据
1 | mongodump --archive=material.20161213.archive --db material |
- 导入数据
1 | mongorestore --archive=test.20150715.archive --db test |
- run
1 | bin\mongod.exe --dbpath D:\workspace\mongdb_data |
MongoDB提供的在线数据收缩的功能,通过Compact命令,进行Collection级别的数据收缩,去除Collectoin所在文件碎片。
1 | db.yourCollection.runCommand(“compact”); |
权限管理
- MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
- 切换到admin数据库,添加的账号才是管理员账号。
- 用户只能在用户所在数据库登录,包括管理员账号。
- 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。
添加管理员账号
输入mongo 登录mongo shell
db.createUser(
{
user: "admin",
pwd: "password",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
创建成功会返回
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
查看创建的用户
show users
db.system.users.find()
开启权限验证,修改 /etc/mongod.conf 添加:
security:
authorization: enable
注意:Yaml的配置文件,是用冒号加空格来区分的,authorization前面不能用tab
重启mongod服务
1 | sudo systemctl restart mongod.service |
admin 登录
进入mongo shell后,执行 show dbs命令,会提示未认证,表示开启权限成功,然后进行下面的登录:
use admin //是用admin数据库进行认证
db.auth('admin','admin')
添加普通用户
普通用户可以用admin 用户进行创建
> use mydb
switched to db mydb
> db.createUser(
{
user: "tonny",
pwd: "passwd",
roles: [ { role: "readWrite", db: "mydb" } ]
}
)
Successfully added user: {
"user" : "tonny",
"roles" : [
{
"role" : "readWrite",
"db" : "mydb"
}
]
}
> exit
bye
[root@snails ~]# mongo
MongoDB shell version: 3.2.7
connecting to: test
> use mydb
switched to db mydb
> db.auth('tonny','passwd')
1
角色说明官方详细角色说明:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限