mongodb简介

MongoDB 是一个基于分布式文件存储的数据库,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
在这里插入图片描述

MongoDB 官网地址:https://www.mongodb.com/

MongoDB 官方英文文档:https://docs.mongodb.com/manual/

MongoDB 各平台下载地址:https://www.mongodb.com/try/download/community

mongodb安装

以在CentOS7中安装mongodb4.4为例。

参考文档:

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

https://mirrors.tuna.tsinghua.edu.cn/help/mongodb/

配置国内清华yum源

cat > /etc/yum.repos.d/mongodb.repo <<'EOF'
[mongodb-org]
name=MongoDB Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el$releasever/
gpgcheck=0
enabled=1
EOF

官方yum源(建议使用国内yum源)

cat > /etc/yum.repos.d/mongodb-org-4.4.repo <<'EOF'
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
EOF

安装mongodb

yum install -y mongodb-org

或者安装指定版本

yum install -y mongodb-org-4.4.4 mongodb-org-server-4.4.4 mongodb-org-shell-4.4.4 mongodb-org-mongos-4.4.4 mongodb-org-tools-4.4.4

查看mongodb版本

mongo --version

MongoDB社区版包含以下官方支持的软件包:

包名描述
mongodb-org一个元数据包,将自动安装下面列出的四个组件软件包
mongodb-org-server包含mongod守护进程和相关的配置以及init脚本
mongodb-org-mongos包含mongos守护进程
mongodb-org-shell包含mongo shell命令行解释器
mongodb-org-tools其他工具

默认情况下,MongoDB使用mongod用户帐户运行,并使用以下默认目录:

  • /var/lib/mongo(数据目录)
  • /var/log/mongodb(日志目录)
  • /etc/mongod.conf(配置目录)

启动mongodb服务并设为随系统启动

systemctl enable --now mongod

mongodb默认监听27017端口

ss -antlp | grep 27017

mongodb主进程为mongod

ps -aux | grep mongod

或者使用docker快速部署mongodb:

docker run -d --name mongo \
    --restart=always \
    -e TZ=Asia/Shanghai \
    -e MONGO_INITDB_ROOT_USERNAME=root \
    -e MONGO_INITDB_ROOT_PASSWORD=123456 \
    -p 27017:27017 \
    -v mongo_data:/data/db \
    mongo

mongodb基本操作

连接到mongodb

mongo

查看所有数据库

> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB

切换到admin数据库

> use admin;

新建数据库同时切换到该数据库,空数据库默认无法使用show dbs查看到:

> use testdb;

查看当前所在数据库

> db;

在testdb数据库中创建一个集合

db.createCollection("users")

通过向一个集合中直接插入一条数据来创建这个集合

db.myuser.insert({"name":"yutao", age:24})

查看当前库里的集合(表)

> show tables;

> show collections;

再次查看创建的数据库

> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB
testdb  0.000GB

删除集合

db.users.drop()

删除数据库,需要先进到库里

> db.dropDatabase()

启用远程连接

mongodb配置文件中默认监听127.0.0.1地址,修改绑定地址,允许远程连接:

# cat /etc/mongod.conf | grep bindIp
  bindIp: 0.0.0.0

重新启动mongodb服务

systemctl restart mongod

远程连接mongodb

mongo 192.168.92.20:27017

启用认证

不需要认证的远程连接方式具有很大的安全风险,所以一般远程连接都采用认证的方式。Mongo 安装好后,authorization默认是 disabled 的,修改配置文件启用认证,然后重启mongodb服务:

# cat /etc/mongod.conf |grep security -A1
security:
  authorization: enabled

要想启用认证,必须先创建一个用户管理员账号,并且该用户拥有 userAdmin 或 userAdminAnyDatabase 角色,这个账号专门用于创建用户,包括给这些用户赋予不同的角色,并且可以针对不同的数据库赋予不同的角色。

连接到mongo shell 中,在 admin 数据库中添加一个具有 userAdminAnyDatabase 角色以及readWriteAnyDatabase 角色的用户:

use admin

db.createUser(
  {
    user: "useradmin",
    pwd: "admin@123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

使用用户认证机制连接 Mongo 可以用两种方式:

  • 在连接 Mongo 时,传入用户的认证信息和已有认证权限的数据库
  • 先连接 Mongo, 之后切换到已有认证权限的数据库,使用 db.auth(“user_name”, “password”) 进行认证。

方式1

mongo --port 27017 -u "useradmin" -p "admin@123" --authenticationDatabase "admin"

方式2

mongo --port 27017
use admin
db.auth("useradmin", "admin@123" )

为某个数据库创建用户,用户名为user1,密码为pass123,授予readWrite角色,获得testdb数据库的读写权限

db.createUser({
    'user': 'user1',
    'pwd': 'pass123',
    'roles': [{
        'role': 'readWrite',
        'db': 'testdb'
    }]
})

更新用户密码及权限:更新user1用户,密码为pass321。获得testdb和newdb数据库的读取权限

db.updateUser(
    "user1",
    {
        pwd: 'pass321',
        customData: {
            title: "Senior Manager"
        },
        roles: [{
            role: "readWrite",
            db: "testdb"
        }, {
            role: "readWrite",
            db: "newdb"
        }]
    }
)

更新用户权限,增加readWriteAnyDatabase权限

db.grantRolesToUser(
    "useradmin",
    [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
)

说明:

  • db.updateUser() 更新用户权限,覆盖原有权限
  • db.grantRolesToUser() 为用户追加权限,保留原有权限

删除用户权限

db.revokeRolesFromUser("user1", [{role:"readWriteAnyDatabase", db:"testdb"}])

删除用户

db.dropUser("user1")

查看全局所有用户

use admin
db.system.users.find().pretty()

查看当前库下的用户

use test
show users

system.users集合保存的就是创建的用户账号信息。

use admin
 
db.getCollection('system.users').find({})
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐