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

【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 的数据库:

  1. 打开你的 MongoDB Shell (mongosh)。

  2. 输入命令 use mydatabase;

    use mydatabase;
    

    shell 会提示你 switched to db mydatabase。此时,你看起来是进入了这个数据库,但如果这是个新名字,它还没有真正被创建出来,也不会出现在 show dbs 的列表里!就像你给一个空房间起了个名字,但房间里啥都没有,对外人看来这个房间仿佛不存在一样!👻
    在这里插入图片描述

  3. 现在,向这个数据库里的某个集合插入一个文档(或者创建集合):

    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()

  1. 首先,你需要切换到要删除的数据库。 就像你得走到那个房间门口才能拆掉它一样!

    use myoldproject_db; // 切换到要删除的数据库
    
  2. 然后,执行删除命令。

    db.dropDatabase();
    

执行这个命令后,MongoDB 会返回一个结果,告诉你操作是否成功。通常你会看到 { "dropped" : "myoldproject_db", "ok" : 1 } 这样的输出,表示 myoldproject_db 数据库已经被成功删除了。

再运行 show dbs;,你会发现刚才删除的数据库已经不见了!💨

重要注意事项:

  • 你不能在执行 dropDatabase() 命令时指定要删除哪个数据库,它总是删除你当前所在的数据库 (db)。所以,切换到正确的数据库是第一步,也是最关键的一步! 别删错了!
  • 删除 admin, config, local 这些系统数据库是非常危险的,可能会导致 MongoDB 无法正常工作!强烈不建议删除它们!这些是 MongoDB 正常运行的“生命线”!❤️‍🩹
  • 执行 dropDatabase() 操作需要足够的权限。通常需要 dropDatabasedbAdmin 等角色权限。如果你连接的用户没有这些权限,操作会失败。

第五节:权限与考量——不是谁都能随便操作的!🔐

在实际应用中,特别是生产环境,你不可能允许所有人对所有数据库进行任意操作。权限管理是数据库安全的核心。

如前所述,MongoDB 的用户和权限信息存储在 admin 数据库中。你可以创建用户,并赋予他们对特定数据库的特定权限(通过角色)。

例如,你可能创建一个用户,他只允许对 ecommerce 数据库进行读写操作,但无权删除 ecommerce 数据库,也无权访问其他数据库(比如 blogadmin)。

对于数据库级别的操作,比如 dropDatabase,通常需要用户拥有该数据库的 dropDatabase 权限,或者拥有 dbAdmindbOwner 等更高级别的权限。而查看所有数据库 (show dbs) 则通常需要 listDatabases 或更高级别的权限。

所以在进行数据库操作时,如果你遇到权限问题,检查一下你当前连接的用户的权限设置是非常必要的!🔑

第六节:总结与展望 (数据库篇) 📚✨

好!关于 MongoDB 数据库本身的操作,咱们就聊到这里!

核心要点回顾一下:

  • 创建数据库: 主要通过 use 命令切换,在第一次写入数据时惰性创建。
  • 查看数据库: 使用 show dbs; 命令。
  • 切换数据库: 使用 use <database name>; 命令。
  • 获取当前数据库: 使用 db 对象。
  • 删除数据库: 使用 db.dropDatabase();危险! 务必先切换到目标数据库!
  • 系统数据库: admin, config, local 很重要,不要随意删除。
  • 权限: 数据库操作需要相应的权限,特别是在安全配置过的环境中。

这些就是你在 MongoDB 中管理数据库层面的主要知识点了!虽然操作命令不多,但理解它“惰性创建”的特性以及删除操作的风险非常重要!


相关文章:

  • GBDT算法原理及Python实现
  • C++入门(缺省参数/函数/引用)
  • 从实列中学习linux shell脚本2: shell 的变量 方法 命名和使用规则之类 比如拿:获取cpu 负载,以及负载超过2.0 以后就发生邮件为例子
  • Silvaco仿真中的victory mesh
  • 信创开发中的数据库详解:国产替代背景下的技术生态与实践指南
  • Sce2DriveX: 用于场景-到-驾驶学习的通用 MLLM 框架——论文阅读
  • 在VMware上创建Ubuntu虚拟机,与Xshell和Xftp的连接和使用
  • 指针变量存放在哪?
  • 香港科技大学广州|智能制造学域硕、博研究生招生可持续能源与环境学域博士招生宣讲会—四川大学专场!
  • Kafka 消息可靠性深度解析:大流量与小流量场景下的设计哲学
  • 计算机毕业设计--基于深度学习(U-Net与多尺度ViT)的车牌模糊图像修复算法设计与实现(含Github代码+Web端在线体验界面)
  • 62.微服务保姆教程 (五) Seata--微服务分布式事务组件
  • Samba-系统集成
  • java web 过滤器
  • 好未来golang后端开发
  • 【Linux】第十五章 调度未来任务
  • 洛谷 B3644:【模板】拓扑排序 / 家谱树 ← 邻接表
  • elementui里的el-tabs的内置样式修改失效?
  • LeetCode - 02.02.返回倒数第 k 个节点
  • 自定义指令input中前面不能输入空格
  • 豆神教育:2024年净利润1.37亿元,同比增长334%
  • 首映|“凤凰传奇”曾毅:拍电影,我是认真的
  • 修订占比近30%收录25万条目,第三版《英汉大词典》来了
  • 我驻阿巴斯总领馆:将持续跟踪港口爆炸事件进展,全力确保中方人员安全
  • 俄军方:已完成库尔斯克地区全面控制行动
  • 伤者升至80人,伊朗港口爆炸源头或为“危险品和化学品仓库”