MongoDB常用命令

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”);

权限管理

  1. MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
  2. 切换到admin数据库,添加的账号才是管理员账号。
  3. 用户只能在用户所在数据库登录,包括管理员账号。
  4. 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在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数据库中可用。超级账号,超级权限

欢迎关注我的其它发布渠道