mongosh常用命令详解及如何开启MongoDB身份验证

目录

Mongosh常用命令介绍

连接到MongoDB实例

基本命令

查看当前数据库

切换数据库

查看所有数据库

查看当前数据库中的集合

CRUD操作

插入文档

查询文档

更新文档

删除文档

替换文档

索引操作

创建索引

查看索引

删除索引

聚合操作

数据库管理

创建用户

删除用户

查看当前用户

备份与恢复

导出数据库

导入数据库

系统信息

查看当前连接

查看数据库状态

查看集合状态

示例示范

如何开启权限验证

角色及权限介绍

内置角色

创建数据库

备份恢复详解

备份数据库

在哪查看备份文件

恢复数据的基本步骤

其他资源


Mongosh常用命令介绍

MongoDB Shell(mongosh)是用于与MongoDB交互的命令行界面。以下是一些在mongosh中常用的命令和操作,它们可以帮助你进行数据库管理、数据操作和查询等。

连接到MongoDB实例

mongosh

运行此命令将打开一个与MongoDB实例的交互式shell。连接到特定的MongoDB实例可以使用:

mongosh "mongodb://localhost:27017"

基本命令

查看当前数据库

db

切换数据库

use myDatabase

查看所有数据库

show databases

查看当前数据库中的集合

show collections

CRUD操作

插入文档

db.collection.insertOne({ name: "John", age: 30 });
db.collection.insertMany([{ name: "Jane", age: 25 }, { name: "Adam", age: 28 }]);

查询文档

db.collection.find();
db.collection.find({ age: { $gt: 25 } });

更新文档

db.collection.updateOne(
  { name: "John" },
  { $set: { age: 31 } }
);

db.collection.updateMany(
  { age: { $lt: 30 } },
  { $set: { valid: true } }
);

删除文档

db.collection.deleteOne({ name: "John" });
db.collection.deleteMany({ age: { $lt: 25 } });

替换文档

db.collection.replaceOne(
  { name: "John" },
  { name: "John Smith", age: 31 }
);

索引操作

创建索引

db.collection.createIndex({ name: 1 });

查看索引

db.collection.getIndexes();

删除索引

db.collection.dropIndex({ name: 1 });

聚合操作

db.collection.aggregate([
  { $match: { age: { $gte: 25 } } },
  { $group: { _id: "$age", count: { $sum: 1 } } }
]);

数据库管理

创建用户

db.createUser({
  user: "myUser",
  pwd: "myPassword",
  roles: [ { role: "readWrite", db: "myDatabase" } ]
});

删除用户

db.dropUser("myUser");

查看当前用户

db.getUsers();

备份与恢复

导出数据库

mongodump --db myDatabase --out /backup/dump

导入数据库

mongorestore --db myDatabase /backup/dump/myDatabase

系统信息

查看当前连接

db.currentOp();

查看数据库状态

db.stats();

查看集合状态

db.collection.stats();

示例示范

// 切换到测试数据库
use testDB;

// 插入文档示例
db.users.insertOne({ name: "Alice", age: 29 });
db.users.insertMany([{ name: "Bob", age: 31 }, { name: "Charlie", age: 25 }]);

// 查询文档示例
db.users.find({ age: { $gte: 30 } });

// 更新文档示例
db.users.updateOne({ name: "Bob" }, { $set: { age: 32 } });

// 删除文档示例
db.users.deleteOne({ name: "Charlie" });

// 创建索引示例
db.users.createIndex({ name: 1 });

// 聚合示例
db.users.aggregate([
  { $match: { age: { $gte: 25 } } },
  { $group: { _id: "$age", count: { $sum: 1 } } }
]);

如何开启权限验证

在MongoDB中添加管理员(root)账户并配置开启验证,可以按照以下步骤操作:

1. 启动MongoDB不带访问控制

首先,确保MongoDB服务正在运行,并且没有开启访问控制。如果是第一次安装或刚修改了配置文件,可能需要以无认证模式启动MongoDB。

2.连接到MongoDB Shell

打开命令行或终端,输入以下命令启动MongoDB Shell:

3.创建管理员用户

在admin数据库中创建一个具有root角色的管理员用户:

db.createUser({
   user: "myRootAdmin",
   pwd: "securePassword123!",
   roles: [ { role: "root", db: "admin" } ]
})

请将myRootAdmin和securePassword123!替换为你想要的用户名和强密码。 

4.开启访问控制

修改MongoDB配置文件以开启访问控制。

编辑MongoDB的配置文件(mongod.conf),通常位于:

Linux: /etc/mongod.conf

Windows: C:\\Program Files\\MongoDBServer\\<version>\\mongod.cfg

在security部分添加或修改以下内容:

security:
  authorization: enabled

5.重启MongoDB服务以应用更改

重启命令依据你的操作系统有所不同:

Linux: sudo systemctl restart mongod

Windows: 使用服务管理器或命令行 net stop MongoDB && net start MongoDB

6. 重启MongoDB服务

重启MongoDB服务以应用更改。重启命令依据你的操作系统有所不同:

Linux: sudo systemctl restart mongod

Windows: 使用服务管理器或命令行 net stop MongoDB && net start MongoDB

7.重新登录

MongoDB服务重启后,需要使用新创建的管理员用户登录:

mongosh -u myRootAdmin -p securePassword123! --authenticationDatabase admin

角色及权限介绍

角色定义了用户可以执行的操作和访问的资源。角色不仅可以是预定义的内置角色,也可以是用户自定义的角色,只要具有相应权限的用户可以创建和分配这些角色。

内置角色

MongoDB提供了一系列内置角色,覆盖了从读写权限到数据库管理、用户管理乃至群集管理的各种权限。一些常见的内置角色包括但不限于:

read: 允许读取指定数据库。

readWrite: 允许读写指定数据库。

dbAdmin: 允许在指定数据库中执行管理操作,如索引管理、查看统计信息等。

userAdmin: 在指定数据库中管理用户和角色。

clusterAdmin: 群集级别的管理权限。

root: 超级用户角色,拥有所有数据库和群集的管理权限。出于安全考虑,应谨慎使用。

如果需要给MongoDB的客户端用户提供读写权限,你应该指定readWrite角色。这个角色允许用户在指定的数据库中执行读和写操作,包括插入、查询、更新和删除文档等。

在创建用户时,可以通过以下命令指定readWrite角色:

use <database_name>
db.createUser({
   user: "<username>",
   pwd: "<password>",
   roles: [{ role: "readWrite", db: "<database_name>" }]
})


 

注意,上述图片中给test数据库指定root权限会被报错。只有admin库才能赋予root角色。

其他角色有: dbAdmin,clusterAdmin,userAdmin,userAdminAnyDatabase,readWrite

dbAdmin角色具备在指定数据库中执行大部分管理操作的权限,但不包括对用户和角色的管理(这部分权限由userAdmin角色提供)。具体而言,dbAdmin角色允许用户执行以下类型的管理操作:
索引管理:创建、修改和删除索引。

存储管理:如执行compact命令来整理集合的数据存储空间。

查看统计信息:查看数据库的统计信息,如使用db.stats()命令。

访问system.profile集合:用于监控数据库操作的性能。

执行某些维护操作:如修复数据库或集合。

查看和修改某些数据库级别的设置:例如,通过修改collation设置来影响集合的排序规则。

注意,尽管dbAdmin拥有广泛的数据库管理权限,但它不能直接读写数据库中的数据(除非另外分配了读写权限),也不能管理数据库用户或执行跨数据库的操作。对于跨数据库的管理操作,需要clusterAdmin角色,而对于管理用户和角色,则需要userAdmin或userAdminAnyDatabase角色。

给予用户dbAdmin角色应当审慎,确保符合最小权限原则,即仅授予完成其职责所必需的最小权限集。如果需要给MongoDB的客户端用户提供读写权限,你应该指定readWrite角色。这个角色允许用户在指定的数据库中执行读和写操作,包括插入、查询、更新和删除文档等。

如,在创建用户时,可以通过以下命令指定最常用的readWrite角色:

use <database_name>
db.createUser({
   user: "<username>",
   pwd: "<password>",
   roles: [{ role: "readWrite", db: "<database_name>" }]
})

如果你想让用户对所有数据库都有读写权限,可以使用readWriteAnyDatabase角色,但这通常只在admin数据库中创建,并且需要非常谨慎,因为它给予了非常广泛的权限:

use admin
db.createUser({
   user: "<username>",
   pwd: "<password>",
   roles: [{ role: "readWriteAnyDatabase", db: "admin" }]
})

 分配权限时应遵循最小权限原则,仅给予完成工作所必需的权限,以维护数据库的安全性。

创建数据库

在MongoDB中创建数据库并不需要专门的命令,只需通过use命令指定一个数据库名称即可。即使该数据库尚不存在,当向它写入数据时MongoDB会自动创建它。例如,如果想创建一个名为myNewDatabase的数据库,可以这样做:

use myNewDatabase
   

执行这行命令后,就已经“切换”到了myNewDatabase。此时,数据库实际上还没有在磁盘上创建,直到你往里面插入数据。

插入数据以真正创建数据库:为了使数据库在磁盘上物理创建,你需要向该数据库的一个集合中插入至少一条数据。例如,创建一个名为items的集合并插入一条记录:

db.items.insertOne({ item: "Sample Item" })
   

 这条命令不仅创建了名为items的集合,也实质上创建了myNewDatabase数据库,因为这是你首

次在这个数据库中写入数据。

验证数据库创建:你可以通过列出所有数据库来验证新数据库是否已经创建:

show dbs
   

记住,数据库和集合的名称都是区分大小写的。 

备份恢复详解

MongoDB数据库备份可以通过多种方式完成,其中最常用的工具是mongodump。以下是使用

mongodump备份数据库的步骤,以及如何查看备份文件和在其他机器上使用备份文件的信息。

mongodump工具可以通过安装MongoDB数据库或者单独安装MongoDB Database Tools来获得。

访问MongoDB Database Tools下载页面: Download MongoDB Command Line Database Tools | MongoDB

安装: 按照下载页面上的指南进行安装。安装后,mongodump等工具将位于安装目录的bin文件夹下,你可能需要将该目录添加到系统的PATH环境变量中以便在命令行任何位置调用。

环境变量配置:安装后,可能需要将工具的bin目录添加到PATH环境变量,以便在命令行直接使用mongodump命令。

备份数据库

使用mongodump命令: 打开命令行工具,输入以下命令来备份整个数据库(替换<database-name>为你想要备份的数据库名称,<backup-directory>为你想要存放备份文件的目录):

   mongodump --db <database-name> --out <backup-directory>
   

如果你想备份所有数据库,可以省略--db参数。

使用认证和更多选项: 如果MongoDB实例启用了认证,你需要提供用户名和密码,以及其他可能的连接选项,如端口、主机地址等。例如:

mongodump --username <username> --password <password> --authenticationDatabase admin --host <hostname> --port <port> --db <database-name> --out <backup-directory>
   

在哪查看备份文件

备份完成后,你可以在指定的<backup-directory>目录下看到备份文件。备份文件以 BSON 格式存储在dump/<database-name>目录下,每个集合都有一个对应的.bson文件,以及一个包含集合元数据的.metadata.json文件。

可以将整个备份目录(包括dump下的所有文件和子目录)拷贝到另一台机器上,并在那台机器上使用mongorestore命令来恢复数据。

恢复数据的基本步骤

以下是恢复数据的基本步骤:

将备份文件复制到目标机器:确保将整个备份目录完整地复制到目标机器上。

使用mongorestore命令: 在目标机器上,打开命令行工具,导航到备份文件所在的目录,然后运行以下命令来恢复数据(替换相应参数):

mongorestore --db <database-name> <backup-directory>/dump/<database-name>
   

如果你想恢复所有数据库,只需指向包含所有数据库备份的根目录即可。

注意,目标机器上需要安装MongoDB,并且版本兼容性也很重要,尽量保证mongodump和mongorestore的版本与MongoDB服务器版本相匹配或兼容,以避免潜在的恢复问题。

其他资源

MongoDB Shell Download | MongoDB

mongodb官网下载不了, MongoDB下载、安装、配置、使用,如何下载MongoDB数据库,MongoDB入门[通俗易懂]-腾讯云开发者社区-腾讯云

MongoDB Shell常用基本操作命令详解_MongoDB_脚本之家

mongo 常用操作指令_mongo指令-CSDN博客

https://zhuanlan.zhihu.com/p/701825851

The MongoDB Database Tools Documentation - MongoDB Database Tools

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/730825.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计Python+Vue.js知识图谱音乐推荐系统 音乐爬虫可视化 音乐数据分析 大数据毕设 大数据毕业设计 机器学习 深度学习 人工智能

开发技术 协同过滤算法、机器学习、LSTM、vue.js、echarts、django、Python、MySQL 创新点协同过滤推荐算法、爬虫、数据可视化、LSTM情感分析、短信、身份证识别 补充说明 适合大数据毕业设计、数据分析、爬虫类计算机毕业设计 介绍 音乐数据的爬取&#xff1a;爬取歌曲、…

(项目实战)业务场景中学透RocketMQ5.0-事务消息在预付卡系统中的应用

1 什么是事务消息 RocketMQ中事务消息主要是解决分布式场景下各业务系统事务一致性问题&#xff0c;常见的分布式事务解决方案有传统XA事务方案、TCC、本地消息表、MQ事务等。今天我们基于RocketMQ事务消息解决预付卡系统资金账户子系统和会员积分子系统、短信子系统分布式事务…

JMeter的基本使用与性能测试,完整入门篇保姆式教程

Jmeter 的简介 JMeter是一个纯Java编写的开源软件&#xff0c;主要用于进行性能测试和功能测试。它支持测试的应用/服务/协议包括Web (HTTP, HTTPS)、SOAP/REST Webservices、FTP、Database via JDBC等。我们最常使用的是HTTP和HTTPS协议。 Jmeter主要组件 线程组&#xff08…

永辉超市:胖东来爆改,成色几何?

单日业绩暴涨14倍。来&#xff0c;看看&#xff0c;这是被胖东来爆改后重新开业后的门店&#xff0c; 不出意外的流量爆炸。胖东来爆改&#xff0c;真是解决实体商超困境的灵丹妙药吗&#xff1f; 今天我们聊聊——永辉超市 最近两年实体商超日子都不好过&#xff0c;去年13家…

在Worpress增加网站的二级目录,并转向到站外网站

在WordPress中&#xff0c;你可以通过添加自定义重定向来实现将某个二级目录&#xff08;例如 www.example.com/subdir&#xff09;重定向到站外网站。可以通过以下几种方法来实现&#xff1a; 方法一&#xff1a;使用 .htaccess 文件 如果你的服务器使用Apache&#xff0c;你…

使用上海云盾 CDN 和 CloudFlare 后 Nginx、 WordPress、 Typecho 获取访客真实 IP 方法

最近因为被 DDoS/CC 攻击的厉害,明月就临时的迁移了服务器,原来的服务器就空置下来了,让明月有时间对服务器进行了重置重新部署安装生产环境。因为站点同时使用了上海云盾和 CloudFlare(具体思路可以参考【国内网站使用国外 CloudFlare CDN 的思路分享】一文)两个 CDN 服务…

Java数据类型与运算符

1. 变量和类型 变量指的是程序运行时可变的量&#xff0c;相当于开辟一块空间来保存一些数据。 类型则是对变量的种类进行了划分&#xff0c;不同类型的变量具有不同的特性。 1.1 整型变量&#xff08;重点&#xff09; 基本语法格式&#xff1a; int 变量名 初始值;代码示…

20240621在飞凌的OK3588-C开发板linux系统的CAM3上接OV5645录像

20240621在飞凌的OK3588-C开发板linux系统的CAM3上接OV5645录像 2024/6/21 19:57 开发板&#xff1a;OK3588-C SDK&#xff1a;linux R4/Buildroot v4l2-ctl --list-devices v4l2-ctl --list-formats-ext -d /dev/video16 gst-launch-1.0 v4l2src device/dev/video16 num-bu…

【Git】 -- Part2 -- 分支管理

1. 分支 在 Git 中&#xff0c;分支&#xff08;Branch&#xff09;是用于在项目中创建独立开发线路的机制。分支使得开发者可以在不影响主干&#xff08;main 或 master&#xff09;的情况下进行实验、开发新功能或修复 Bug。 举个例子&#xff1a; 分⽀就好像是科幻电影⾥⾯…

鸿蒙开发:【进程模型概述】

进程模型概述 系统的进程模型如下图所示&#xff1a; 应用中&#xff08;同一包名&#xff09;的所有PageAbility、ServiceAbility、DataAbility、FormAbility运行在同一个独立进程中&#xff0c;即图中绿色部分的“Main Process”。 WebView拥有独立的渲染进程&#xff0c;即…

OS复习笔记ch11-2

上一节我们学习的内容是I/O系统的特点和设备分类和差异&#xff0c;这一节我们将主要关注I/O控制方式、OS设计问题、I/O逻辑结构等。 I/O功能的演变 在专栏的ch1-2中&#xff0c;我们详细讲解了CPU与外设的三种交互方式&#xff0c;这里简单地带过。 &#xff08;1&#xff0…

MPLS-LDP(个人学习笔记)

定义 标签分发协议LDP&#xff08;Label Distribution Protocol&#xff09;是多协议标签交换MPLS的一种控制协议&#xff0c;负责转发等价类FEC的分类、标签的分配以及标签交换路径LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程 术语 LDP会话&a…

计算机组成原理 | 计算机系统概述

CPI:(Clockcycle Per Instruction)&#xff0c;指每条指令的时钟周期数。 时钟周期&#xff1a;对CPU来说&#xff0c;在一个时钟周期内&#xff0c;CPU仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲&#xff0c;控制着计算机的工作节奏。时钟周期 是一个时钟脉冲所…

ECharts 词云案例三:2024年阅读关键词

ECharts 词云案例三&#xff1a;2024年阅读关键词 引言 在数据可视化领域&#xff0c;ECharts 以其强大的功能性和灵活性&#xff0c;成为开发者和设计师的首选工具之一。继上一篇关于 ECharts 词云图的详细介绍后&#xff0c;本文将探索词云图的进阶应用——使用蒙版来创造更…

约束求解器方案设计

1.约束求解介绍 给定一个几何对象&#xff08;点、直线段、圆、圆弧、平面等&#xff09;的集合G和一个关于集合G中几何对象之间约束&#xff08;点的位置、直线段的长度、圆弧对应的圆心角角度、垂直、相切等&#xff09; 的集合C&#xff0c;则在二元组(G&#xff0c;C)中根…

【UIDynamic-动力学-附着行为-刚性附着 Objective-C语言】

一、接下来,我们来说这个附着行为啊, 1.我们之前举过例子,一个车坏了,另外一个车,拉着这个车,就是附着行为啊, 这个里边呢,我们新建一个项目, Name:09-附着行为-刚性附着, 附着行为呢,分为两个大类: 1)刚性附着 2)弹性附着 刚性附着,指的就是,两个物体之间…

第九届世界渲染大赛什么时候开始举办?

​第九届世界渲染大赛即将开启&#xff0c;全球设计师和艺术家将汇聚一堂&#xff0c;展现3D艺术的创新与美感。敬请期待这场业界顶级的视觉盛宴&#xff0c;让我们共同关注大赛的启幕时刻。 第九届世界渲染大赛开始时间 预计时间&#xff1a;2024年7月(中旬) 报名方法&#…

光纤三维布里渊温度和应变分布matlab模拟与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 光纤三维布里渊温度和应变分布matlab模拟与仿真。其中 , 布里渊散射是光波与声波在光纤中传播时相互作用而产生的光散射过程 , 在不 同的条件下 , 布里渊散射又分…

51单片机STC89C52RC——4.1 独立按键(数码管显示按键值)

目录 目录 目的 一&#xff0c;STC单片机模块 二&#xff0c;矩阵按键模块 2.1 针脚定义 ​编辑 2.2 矩阵按键位置 2.3 如何理解按键按下后针脚的高低电平 2.3.1 错误理解1 2.3.2 错误理解2 2.3.3 正确判定按下的是那个按键的逻辑 2.3.4 判定按键按下的依次扫描程…

服务端代码编写中MySql大小写在Java中报错问题解决

报错信息&#xff1a; 原因&#xff1a;MySql和Java变量大小写产生的冲突。 经过查阅各个博客等&#xff0c;得出浅显结论&#xff08;不一定对&#xff09;&#xff1a;MySql大小写不敏感&#xff0c;Java大小写敏感&#xff0c;当Javabean转为MySql数据库表时&#xff0c;Ja…