目录
Mongosh常用命令介绍
MongoDB Shell(mongosh)是用于与MongoDB交互的命令行界面。以下是一些在mongosh中常用的命令和操作,它们可以帮助你进行数据库管理、数据操作和查询等。
连接到MongoDB实例
bash
mongosh
运行此命令将打开一个与MongoDB实例的交互式shell。连接到特定的MongoDB实例可以使用:
bash
mongosh "mongodb://localhost:27017"
基本命令
查看当前数据库
bash
db
切换数据库
use myDatabase
查看所有数据库
show databases
查看当前数据库中的集合
show collections
CRUD操作
插入文档
bash
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 } });
更新文档
bash
db.collection.updateOne(
{ name: "John" },
{ $set: { age: 31 } }
);
db.collection.updateMany(
{ age: { $lt: 30 } },
{ $set: { valid: true } }
);
删除文档
bash
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角色的管理员用户:
bash
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部分添加或修改以下内容:
bash
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服务重启后,需要使用新创建的管理员用户登录:
bash
mongosh -u myRootAdmin -p securePassword123! --authenticationDatabase admin
角色及权限介绍
角色定义了用户可以执行的操作和访问的资源。角色不仅可以是预定义的内置角色,也可以是用户自定义的角色,只要具有相应权限的用户可以创建和分配这些角色。
内置角色
MongoDB提供了一系列内置角色,覆盖了从读写权限到数据库管理、用户管理乃至群集管理的各种权限。一些常见的内置角色包括但不限于:
read: 允许读取指定数据库。
readWrite: 允许读写指定数据库。
dbAdmin: 允许在指定数据库中执行管理操作,如索引管理、查看统计信息等。
userAdmin: 在指定数据库中管理用户和角色。
clusterAdmin: 群集级别的管理权限。
root: 超级用户角色,拥有所有数据库和群集的管理权限。出于安全考虑,应谨慎使用。
如果需要给MongoDB的客户端用户提供读写权限,你应该指定readWrite角色。这个角色允许用户在指定的数据库中执行读和写操作,包括插入、查询、更新和删除文档等。
在创建用户时,可以通过以下命令指定readWrite角色:
bash
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角色:
cpp
use <database_name>
db.createUser({
user: "<username>",
pwd: "<password>",
roles: [{ role: "readWrite", db: "<database_name>" }]
})
如果你想让用户对所有数据库都有读写权限,可以使用readWriteAnyDatabase角色,但这通常只在admin数据库中创建,并且需要非常谨慎,因为它给予了非常广泛的权限:
bash
use admin
db.createUser({
user: "<username>",
pwd: "<password>",
roles: [{ role: "readWriteAnyDatabase", db: "admin" }]
})
分配权限时应遵循最小权限原则,仅给予完成工作所必需的权限,以维护数据库的安全性。
创建数据库
在MongoDB中创建数据库并不需要专门的命令,只需通过use命令指定一个数据库名称即可。即使该数据库尚不存在,当向它写入数据时MongoDB会自动创建它。例如,如果想创建一个名为myNewDatabase的数据库,可以这样做:
bash
use myNewDatabase
执行这行命令后,就已经"切换"到了myNewDatabase。此时,数据库实际上还没有在磁盘上创建,直到你往里面插入数据。
插入数据以真正创建数据库:为了使数据库在磁盘上物理创建,你需要向该数据库的一个集合中插入至少一条数据。例如,创建一个名为items的集合并插入一条记录:
bash
db.items.insertOne({ item: "Sample Item" })
这条命令不仅创建了名为items的集合,也实质上创建了myNewDatabase数据库,因为这是你首
次在这个数据库中写入数据。
验证数据库创建:你可以通过列出所有数据库来验证新数据库是否已经创建:
bash
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>为你想要存放备份文件的目录):
bash
mongodump --db <database-name> --out <backup-directory>
如果你想备份所有数据库,可以省略--db参数。
使用认证和更多选项: 如果MongoDB实例启用了认证,你需要提供用户名和密码,以及其他可能的连接选项,如端口、主机地址等。例如:
bash
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命令: 在目标机器上,打开命令行工具,导航到备份文件所在的目录,然后运行以下命令来恢复数据(替换相应参数):
bash
mongorestore --db <database-name> <backup-directory>/dump/<database-name>
如果你想恢复所有数据库,只需指向包含所有数据库备份的根目录即可。
注意,目标机器上需要安装MongoDB,并且版本兼容性也很重要,尽量保证mongodump和mongorestore的版本与MongoDB服务器版本相匹配或兼容,以避免潜在的恢复问题。
其他资源
MongoDB Shell Download | MongoDB
mongodb官网下载不了, MongoDB下载、安装、配置、使用,如何下载MongoDB数据库,MongoDB入门[通俗易懂]-腾讯云开发者社区-腾讯云
MongoDB Shell常用基本操作命令详解_MongoDB_脚本之家
https://zhuanlan.zhihu.com/p/701825851
The MongoDB Database Tools Documentation - MongoDB Database Tools