当前位置: 首页 > news >正文

Docker部署 MongoDB及常用命令

docker 部署

docker run -d \--name mongo \-e MONGO_INITDB_ROOT_USERNAME=root \-e MONGO_INITDB_ROOT_PASSWORD=123456 \-p 27017:27017 \-v ./local-mongo-data:/data/db \mongo:latest

或者编写 docker-compose.yaml 文件。如下:

version: '3.1'services:mongo:image: mongo:latestcontainer_name: mongoenvironment:MONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROOT_PASSWORD: 123456ports:- 27017:27017volumes:- ./local-mongo-data:/data/db  # 挂载本地目录到容器的数据目录

常用命令

# 登录
mongosh -u root -p --authenticationDatabase admin ## 输入密码
## 查看数据库
show dbs
## 切换数据库
use [dbname]
## 查看表
show tables
## 查看数据
db.[table name].find()

创建用户

1. 连接到 MongoDB

首先,连接到 MongoDB 实例 使用管理员权限
bash mongosh -u root -p --authenticationDatabase admin

2. 选择数据库

你可以在任意数据库中创建角色,通常会在 admin 数据库中创建全局角色,或者在某个特定的数据库中创建角色。

use mydatabase  // 选择一个特定的数据库,或使用 admin 数据库

3. 创建角色

使用 db.createRole() 方法来创建一个角色。你可以指定该角色的权限、作用域以及可以访问的数据库。

语法:

db.createRole({role: "roleName",  // 角色名称privileges: [       // 权限数组{resource: { db: "databaseName", collection: "collectionName" },  // 权限作用的数据库和集合actions: [ "action1", "action2" ]  // 角色具有的操作权限,如 "find", "insert", "update" 等}],roles: [            // 角色继承其他角色{ role: "otherRoleName", db: "databaseName" }]
});

4. 角色权限说明

MongoDB 中的权限可以控制特定的操作(如读取、写入、创建索引等)。以下是一些常见的操作权限:

  • "find":读取文档。
  • "insert":插入文档。
  • "update":更新文档。
  • "remove":删除文档。
  • "createCollection":创建集合。
  • "createIndex":创建索引。
  • "dropCollection":删除集合。
  • "dropIndex":删除索引。

5. 示例:创建一个自定义角色

假设我们希望为 mydatabase 创建一个角色,该角色允许用户在该数据库中进行插入和查询操作。我们可以使用以下命令:

db.createRole({role: "insertAndFindRole",  // 角色名称privileges: [{resource: { db: "mydatabase", collection: "" },  // 对 mydatabase 数据库的所有集合进行权限控制actions: ["find", "insert"]  // 该角色具有 "find" 和 "insert" 权限}],roles: []  // 不继承其他角色
});

6. 查看已创建的角色

要查看当前数据库中所有的角色,可以使用以下命令:

show roles

或者查看特定数据库中的角色:

use mydatabase
show roles

7. 将角色授予用户

创建角色后,您可以将角色分配给用户。使用 db.grantRolesToUser() 来给用户分配角色。

db.grantRolesToUser("myuser", [{ role: "insertAndFindRole", db: "mydatabase" }
]);

或者创建用户

db.createUser({ user: "user", pwd: "123456", roles: [{role: "insertAndFindRole", db: "test" }]})

8. 删除角色

如果你不再需要某个角色,可以使用 db.dropRole() 删除它:

db.dropRole("insertAndFindRole");

常见问题

1. 无法登录 MongoDB

问题描述:

当你创建了 MongoDB 用户后,可能会遇到用户无法登录的问题。

解决方法:

MongoDb的用户是与数据库绑定的,默认使用创建用户时所在的数据库作为认证数据库。如果用户在一个数据库中创建,但在登录时没有正确指定认证数据库,可能会导致认证失败。

为了解决这个问题,可以通过在连接字符串中添加 ?authSource=admin 来明确指定认证数据库。

示例:

如果你在 admin 数据库中创建了用户,但尝试登录其他数据库,可以使用如下连接方式:

mongo -u <username> -p <password> --authenticationDatabase admin --db <your-database>

或者,如果通过 URL 连接:

mongodb://<username>:<password>@localhost:27017/<your-database>?authSource=admin

这样可以确保 MongoDB 正确地在 admin 数据库中进行身份验证。

http://www.lryc.cn/news/543504.html

相关文章:

  • 27.[前端开发-JavaScript基础]Day04-函数基本使用-递归-变量作用域-函数式编程
  • mac修改docker的daemon.json 镜像文件
  • KIMI K1.5:大规模强化学习在大语言模型中的应用与工程实践
  • seacms v9 实现的MySQL注入
  • Go中slice和map引用传递误区
  • C# Unity 唐老狮 No.2 模拟面试题
  • 【Uniapp-Vue3】开发userStore用户所需的相关操作
  • DeepSeek开源周首日:发布大模型加速核心技术可变长度高效FlashMLA 加持H800算力解码性能狂飙升至3000GB/s
  • 易语言模拟真人鼠标轨迹算法 - 防止游戏检测
  • DeepSeek 提示词:基础结构
  • 文件系统
  • 力扣LeetCode:1472 设计浏览器历史记录
  • 【FL0091】基于SSM和微信小程序的社区二手物品交易小程序
  • 【笔记ing】每天50个英语词汇
  • 联想 SR590 服务器 530-8i RAID 控制器更换损坏的硬盘
  • Java基础关键_012_包装类
  • 【react】TypeScript在react中的使用
  • vllm的使用方式,入门教程
  • IDEA 使用codeGPT+deepseek
  • vue3中测试:单元测试、组件测试、端到端测试
  • 机器学习介绍与数据集
  • React 源码揭秘 | 更新队列
  • 关于网络端口探测:TCP端口和UDP端口探测区别
  • Vue.js 中使用 JSX 自定义语法封装组件
  • 设计模式教程:备忘录模式(Memento Pattern)
  • 使用 C# 以api的形式调用 DeepSeek
  • CS5366AN:高集成Type-C转HDMI 4K60Hz芯片的国产突破
  • 瑞芯微RK安卓Android主板GPIO按键配置方法,触觉智能嵌入式开发
  • Dify自定义工作流集成指南:对接阿里云百炼文生图API的实现方案
  • 前端项目配置 Nginx 全攻略