【MongoDB篇】MongoDB的数据库操作!
目录
- 引言
- 第一节:数据库的“诞生”——如何创建数据库?🤔
- 第二节:数据库的“查阅”——看看我的数据库们!🕵️♀️
- 第三节:数据库的“切换”——我在哪个房间干活?➡️🚪
- 第四节:数据库的“销毁”——再见,这个房间!💥👋
- 第五节:权限与考量——不是谁都能随便操作的!🔐
- 第六节:总结与展望 (数据库篇) 📚✨
🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
其他优质专栏: 【🎇SpringBoot】【🎉多线程】【🎨Redis】【✨设计模式专栏(已完结)】…等
如果喜欢作者的讲解方式,可以点赞收藏加关注,你的支持就是我的动力
✨更多文章请看个人主页: 码熔burning
来,各位csdn的佬友们!💻📱 这是一篇专门为你量身定制的,关于如何“驯服”MongoDB 数据库(而不是里面的数据)的干货文章!请接收!👇
看之前可以先了解一下MongoDB是什么:【MongoDB篇】万字带你初识MongoDB!
引言
嘿!各位未来的数据库大侠们!👋 欢迎来到我的技术专栏!我是你们的幽默段子手,今天,咱们要深入聊聊 MongoDB 这个“自由文档世界”的基石——数据库操作!
数据库,就像是你在 MongoDB 这个大仓库里划分出的一个个独立的“房间”或者“区域”🏦。每个区域都有自己的名字,用来存放不同类别的数据。比如你可以有一个 ecommerce
数据库放电商数据,一个 blog
数据库放博客文章,一个 users
数据库放用户资料(虽然通常用户也会放在某个应用数据库里)。
在 MongoDB 里,对数据库本身的操作,跟你在关系型数据库里的体验会有些“小不同”!准备好了吗?让我们一起揭开这些操作的神秘面纱!😎
第一节:数据库的“诞生”——如何创建数据库?🤔
在很多数据库系统里,创建数据库通常是一个明确的命令,比如 CREATE DATABASE mydatabase;
。但是在 MongoDB 里,它的做法有点“懒惰”和“顺其自然”!🧘♂️
你并不需要一个独立的 CREATE DATABASE
命令来预先创建一个数据库。
那它是怎么诞生的呢?
答案是通过 use <database name>
命令,并在你第一次向这个数据库里的集合中写入数据(比如插入文档)时,MongoDB 会自动为你创建这个数据库!✨
是的,你没听错!只要你通过 use
命令指定了一个数据库名,然后执行了任何写操作(insertOne
, updateMany
, deleteMany
等等)或者创建了集合 (createCollection
),如果这个数据库之前不存在,MongoDB 就会在幕后悄悄地把它创建出来!
示例:
假设你想要创建一个名为 mydatabase
的数据库:
-
打开你的 MongoDB Shell (
mongosh
)。 -
输入命令
use mydatabase;
use mydatabase;
shell 会提示你
switched to db mydatabase
。此时,你看起来是进入了这个数据库,但如果这是个新名字,它还没有真正被创建出来,也不会出现在show dbs
的列表里!就像你给一个空房间起了个名字,但房间里啥都没有,对外人看来这个房间仿佛不存在一样!👻
-
现在,向这个数据库里的某个集合插入一个文档(或者创建集合):
db.mycollection.insertOne({ greeting: "Hello, MongoDB Database!" });
这条命令会做两件事:
- 如果
mydatabase
数据库不存在,它会被创建。 - 如果
mycollection
集合在mydatabase
数据库里不存在,它也会被创建。 - 然后,文档被插入到
mycollection
集合里。
- 如果
此时,如果你再运行 show dbs;
命令,你就会看到 mydatabase
赫然出现在列表里了!🎉
核心概念: MongoDB 数据库的创建是惰性的,它发生在第一次有数据写入这个数据库时。use
命令更多的是用来切换你当前操作的数据库上下文!
第二节:数据库的“查阅”——看看我的数据库们!🕵️♀️
想知道你的 MongoDB 里住着哪些“邻居”数据库?简单!
使用 show dbs;
命令,或者它的别名 show databases;
。
show dbs;
执行这个命令,你会看到一个列表,大概长这样:
列表会显示数据库的名称以及它们占用的存储空间(通常是一个近似值)。
这里有几个你可能会经常看到的“系统级”数据库:
admin
:这是 MongoDB 的管理数据库。用于存储用户、角色和权限信息,以及一些服务器级别的命令(比如关机、复制集配置等)。管理 MongoDB 的安全性和集群状态,通常需要在这个库里操作。它是你的“控制中心”!🕹️local
:这个数据库用于存储复制集成员的本地数据。比如复制集配置、操作日志 (oplog) 等。这些数据是本地的,不会被复制到其他成员。它是每个节点自己的“日记本”!📔config
:如果你部署了分片集群 (Sharded Cluster),这个数据库就会出现。它存储了集群的元数据信息,比如分片信息、数据分布情况等。它是分片集群的“大脑”!🧠
除了这些系统数据库,你通过 use
命令并写入数据创建的用户数据库也会出现在这个列表里。
注意: 只有包含数据的数据库(或者在 admin
中有用户或角色引用的数据库)才会出现在 show dbs
的列表中。一个空数据库 (use new_empty_db;
之后什么都没做) 是不会显示的,直到你往里塞点东西!📦
第三节:数据库的“切换”——我在哪个房间干活?➡️🚪
正如我们在创建数据库时提到的,use <database name>
命令是你在不同数据库之间“跳跃”的主要方式。
use blog; // 切换到 blog 数据库
当你执行 use
命令后,MongoDB Shell 的提示符通常会变成你当前所在的数据库名称(比如 blog>
),这表示你现在所有的操作(创建集合、插入文档、查询等等)都将默认针对这个数据库进行。
这个操作非常频繁,就像你在电脑里切换文件夹一样方便!📁➡️📂
获取当前数据库:
在 Shell 里,你可以随时使用 db
对象来代表当前你所在的数据库。打印 db
会显示当前数据库的名称:
db; // 输出当前数据库名称,比如 blog
你可以通过 db.<collection_name>.<operation>
的方式来操作当前数据库中的集合。
第四节:数据库的“销毁”——再见,这个房间!💥👋
有时候,某个数据库完成了它的历史使命,里面的数据也不再需要了。比如一个测试数据库,或者一个旧项目的数据库。这时候,你可以选择删除它!
警告: 删除数据库是一个非常危险的操作! 一旦删除,数据库中的所有集合和所有文档都将永久丢失!不可恢复! 在执行这个操作之前,请务必再三确认,并在生产环境谨慎至极,最好先进行备份!💣💾
删除数据库的命令是 db.dropDatabase()
。
-
首先,你需要切换到要删除的数据库。 就像你得走到那个房间门口才能拆掉它一样!
use myoldproject_db; // 切换到要删除的数据库
-
然后,执行删除命令。
db.dropDatabase();
执行这个命令后,MongoDB 会返回一个结果,告诉你操作是否成功。通常你会看到 { "dropped" : "myoldproject_db", "ok" : 1 }
这样的输出,表示 myoldproject_db
数据库已经被成功删除了。
再运行 show dbs;
,你会发现刚才删除的数据库已经不见了!💨
重要注意事项:
- 你不能在执行
dropDatabase()
命令时指定要删除哪个数据库,它总是删除你当前所在的数据库 (db
)。所以,切换到正确的数据库是第一步,也是最关键的一步! 别删错了! - 删除
admin
,config
,local
这些系统数据库是非常危险的,可能会导致 MongoDB 无法正常工作!强烈不建议删除它们!这些是 MongoDB 正常运行的“生命线”!❤️🩹 - 执行
dropDatabase()
操作需要足够的权限。通常需要dropDatabase
或dbAdmin
等角色权限。如果你连接的用户没有这些权限,操作会失败。
第五节:权限与考量——不是谁都能随便操作的!🔐
在实际应用中,特别是生产环境,你不可能允许所有人对所有数据库进行任意操作。权限管理是数据库安全的核心。
如前所述,MongoDB 的用户和权限信息存储在 admin
数据库中。你可以创建用户,并赋予他们对特定数据库的特定权限(通过角色)。
例如,你可能创建一个用户,他只允许对 ecommerce
数据库进行读写操作,但无权删除 ecommerce
数据库,也无权访问其他数据库(比如 blog
或 admin
)。
对于数据库级别的操作,比如 dropDatabase
,通常需要用户拥有该数据库的 dropDatabase
权限,或者拥有 dbAdmin
、dbOwner
等更高级别的权限。而查看所有数据库 (show dbs
) 则通常需要 listDatabases
或更高级别的权限。
所以在进行数据库操作时,如果你遇到权限问题,检查一下你当前连接的用户的权限设置是非常必要的!🔑
第六节:总结与展望 (数据库篇) 📚✨
好!关于 MongoDB 数据库本身的操作,咱们就聊到这里!
核心要点回顾一下:
- 创建数据库: 主要通过
use
命令切换,在第一次写入数据时惰性创建。 - 查看数据库: 使用
show dbs;
命令。 - 切换数据库: 使用
use <database name>;
命令。 - 获取当前数据库: 使用
db
对象。 - 删除数据库: 使用
db.dropDatabase();
,危险! 务必先切换到目标数据库! - 系统数据库:
admin
,config
,local
很重要,不要随意删除。 - 权限: 数据库操作需要相应的权限,特别是在安全配置过的环境中。
这些就是你在 MongoDB 中管理数据库层面的主要知识点了!虽然操作命令不多,但理解它“惰性创建”的特性以及删除操作的风险非常重要!