快速入门
MongoDB 是通用、基于文档的分布式数据库,帮助现代应用程序开发人员迎接云时代的到来。它在类似 JSON 的文档内存储数据。这种面对数据的数据存储方法非常自然,比传统的排/列模型更加直观和强大。MongoDB 也是一个真正的具有全套工具的数据平台,能帮助开发人员、分析师和数据科学家等各类人群更方便地处理数据。
准备
部署 Websoft9 提供的 MongoDB 之后,需完成如下的准备工作:
- 在云控制台获取您的 服务器公网IP地址
- 在云控制台安全组中,确保 Inbound(入)规则 下的 TCP:27017 和 9091 端口已经开启
- 在服务器中查看 MongoDB 的 默认账号和密码
- 若想用域名访问 MongoDB,务必先完成 域名五步设置 过程
MongoDB 初始化向导
详细步骤
部署 MongoDB 之后,依次完成下面的步骤,验证其可用性:
-
使用 SSH 连接 MongoDB 所在的服务器,运行下面的命令,查看 MongoDB 的运行状态
cd /data/apps/mongodb && sudo docker compose ls
MongoDB 正常运行会得到 " STATUS: running(1) " 的反馈
-
运行 MongoDB Shell 命令(不知道账号密码?)
$ docker exec -it mongodb mongosh admin -u root -p YOURPASSWORD
MongoDB shell version v5.0.10
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
{"t":{"$date":"2022-08-10T03:05:34.194Z"},"s":"I", "c":"NETWORK", "id":5693100, "ctx":"js","msg":"Asio socket.set_option failed with std::system_error","attr":{"note":"connect (sync) TCP fast open","option":{"level":6,"name":30,"data":"01 00 00 00"},"error":{"what":"set_option: Protocol not available","message":"Protocol not available","category":"asio.system","value":92}}}
Implicit session: session { "id" : UUID("030a4e0b-54cf-4f93-aa90-792b10c478f7") }
MongoDB server version: 5.0.10
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
> -
分别列出默认数据库和用户
# 列出所有数据库
show dbs
# 切换到 admin 数据库,列出所有用户
use admin
show users
出现问题?
若碰到问题,请第一时刻联系 技术支持。也可以先参考下面列出的问题定位或 FAQ 尝试快速解决问题。
MongoDB 默认启用账号认证吗?
默认情况下 MongoDB 认证已开启。
MongoDB 入门指南
需要了解更多 MongoDB 的使用,请官方文档 MongoDB Administration
MongoDB 常用操作
开启 MongoDB 远程访问
默认MongoDB 远程访问已经开启,如果因为其它因素无法远程,可如下操作:
-
修改 MongDB 配置文件
# 将 bindIP 修改为 0.0.0.0 或 本地电脑公网IP
net:
port: 27017
bindIp: 0.0.0.00.0.0.0 代表任意公网IP均可访问
-
重启 MongoDB 服务
sudo docker restart mongodb
关闭 MongoDB 访问认证
默认情况下 MongoDB 认证已开启,可按照下面流程关闭:
-
打开 MongoDB compose 文件,将环境变量用户以及密码注释掉。
services:
mongo:
image: mongo:${APP_VERSION}
restart: always
container_name: ${APP_NAME}
ports:
- ${APP_MONGO_PORT}:27017
#environment:
# MONGO_INITDB_ROOT_USERNAME: ${APP_USER}
# MONGO_INITDB_ROOT_PASSWORD: ${APP_PASSWORD} -
重新创建 MongoDB 容器
cd /data/apps/mongodb
sudo docker compose up -d
图形化 Web 端(MongoDB Compass)
MongoDB Compass 官方提供的客户端工具,我们的部署方案已经将它预装到一个 Web 环境中:
使用 MongoDB Compass 的前置条件:
- 开启 MongoDB的访问认证
- 开启服务器安全组 TCP:9091 端口
-
本地电脑浏览器访问:https://服务器公网IP:9091 ,根据提示输入用户名和密码登陆web桌面(不知道账号密码?)
-
点击web桌面的 MongoDB Compass 图标,进入MongoDB Compass
-
填写准确的字段,连接 MongoDB
# 示例连接字符串
mongodb://root:1cTFecwTEs@mongodb:27017 -
连接成功,进入控制台
规划数据模型
MongoDB 作为一种数据库,与传统的 RDBMS 的使用方式也有相似之处,即规划数据模型,建立数据库范式。只有这种,才能更好的发挥数据库的性能。
数据规划的主要设计要点包括:
- 使用数据范式
- 使用嵌入式文档反范式
- 使用固定集合
- 考虑文档增大
- 规划索引、分片和复制
- 规划数据生命周期
命令速查
下面列出最常用的 MongoDB 命令供用户参考:
显示、创建和切换数据库
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
# 创建test数据库(如果不存在test数据库,就会自动创建它)
> use test
switched to db test
# 显示当前数据库
> db
test
# 显示当前所有用户数据
> show users
#3 插入数据到数据库
> db.test.insert({"name":"company"})
WriteResult({ "nInserted" : 1 })
删除数据库
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
websoft9 0.000GB
> use test
switched to db test
> use test
> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
websoft9 0.000GB
创建管理员账号
> mongo
> use admin
switched to db admin
> db.createUser( { user: "webs_admin", pwd: "websoft9", roles: ["userAdminAnyDatabase"] } )
Successfully added user: { "user" : "webs_admin", "roles" : [ "userAdminAnyDatabase" ] }
# 显示账号
> show users
{
"_id" : "admin.webs_admin",
"user" : "webs_admin",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
密码管理
修改密码
参考下面的命令,修改已经创建的管理员账号root的密码
$ docker exec -it mongodb mongo admin -u root -p YOURPASSWORD
MongoDB shell version v4.0.18
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
> db = db.getSiblingDB('admin')
admin
> db.changeUserPassword("root", "NEWPASSWORD")
> exit
重置密码
重置密码即已经忘记密码的情况下,通过特殊手段重新设置新密码的过程。
-
修改 MongoDB compose 文件,将环境变量用户以及密码注释掉
services:
mongo:
image: mongo:${APP_VERSION}
restart: always
container_name: ${APP_NAME}
ports:
- ${APP_MONGO_PORT}:27017
#environment:
# MONGO_INITDB_ROOT_USERNAME: ${APP_USER}
# MONGO_INITDB_ROOT_PASSWORD: ${APP_PASSWORD} -
重启 MongoDB 服务
cd /data/apps/mongodb
sudo docker compose up -d -
进入mongodb容器
docker exec -it mongodb bash
-
重新设置密码
mongo
> db = db.getSiblingDB('admin')
admin
> db.changeUserPassword("root", "NEWPASSWORD")