【MongoDB篇】MongoDB的集合操作!

在這里插入圖片描述

目錄

    • 引言
    • 第一節:集合的“誕生”——自動出現還是手動打造?🤔
    • 第二節:集合的“查閱”——看看這個數據庫里有哪些柜子?📂👀
    • 第三節:集合的“重命名”——給文件柜換個名字!??
    • 第四節:集合的“銷毀”——丟掉這個文件柜!💥👋
    • 第五節:集合與模式 (Schema) 的那些事兒 🤔??📄
    • 第六節:總結與展望 (集合篇) 🎉📄

🌟我的其他文章也講解的比較有趣😁,如果喜歡博主的講解方式,可以多多支持一下,感謝🤗!

其他優質專欄: 【🎇SpringBoot】【🎉多線程】【🎨Redis】【?設計模式專欄(已完結)】…等

如果喜歡作者的講解方式,可以點贊收藏加關注,你的支持就是我的動力
?更多文章請看個人主頁: 碼熔burning

來,各位csdn的佬友們!💻📱 這是一篇專門為你量身定制的,關于如何“馴服”MongoDB 數據庫(而不是里面的數據)的干貨文章!請接收!👇

看之前可以先了解一下MongoDB是什么:【MongoDB篇】萬字帶你初識MongoDB!

引言

各位未來的技術大牛們,你們好!👋 上一篇咱們聊透了 MongoDB 的“房間”——數據庫。現在,咱們的目光轉向房間里那些用來分門別類存放數據的“文件柜”——集合 (Collection)

了解數據庫操作請看:【MongoDB篇】MongoDB的數據庫操作!

在傳統的關系型數據庫里,你把數據放在“表”里,表有固定的列,每行數據都得按照表的結構來。而在 MongoDB 里,這個概念被“集合”取代了。集合是文檔 (Document) 的容器,它最大的特點是:同一個集合里的文檔,可以有不同的結構! 🤯

想象一下,你的文件柜里不再是整齊劃一的文件夾,而是各種形狀、大小、內容都不一樣的“包裹”(文檔),只要你能把它們塞進同一個柜子(集合)里,就行!📦??📁

這種靈活的設計,讓 MongoDB 在處理多樣化、結構不固定的數據時如魚得水!🚀

那么,對于這些靈活的“文件柜”,我們都能做些什么操作呢?

第一節:集合的“誕生”——自動出現還是手動打造?🤔

就像數據庫一樣,MongoDB 的集合也可以通過兩種方式“誕生”:自動創建 (Implicit Creation)手動創建 (Explicit Creation)

1. 自動創建 (Implicit Creation) - 懶人模式!😴

這是 MongoDB 最常見的方式!當你第一次向一個不存在的集合中插入文檔時,MongoDB 會自動創建這個集合。

示例:

假設你當前在 mydatabase 數據庫里,并且里面還沒有一個叫 users 的集合。

use mydatabase; // 切換到數據庫
db.users.insertOne({ name: "張三", age: 30 }); // 向 users 集合插入第一個文檔

在這里插入圖片描述

執行 db.users.insertOne(...) 命令后,MongoDB 會發現 mydatabase 數據庫里還沒有 users 這個集合,于是它會自動為你創建 users 集合,然后再把文檔插入進去。

此時,如果你執行 show collections; 命令,你會看到 users 集合已經出現在列表里了!🎉

在這里插入圖片描述

優點: 開發速度快,特別是在原型開發或數據結構變動頻繁時,你不需要停下來先定義集合。
缺點: 無法在創建時指定一些高級選項,比如設置固定大小集合 (Capped Collection) 或添加數據驗證規則 (Schema Validation)。

2. 手動創建 (Explicit Creation) - 精心打造模式!📐?

如果你需要在創建集合時指定一些特殊的屬性或行為,比如固定大小、數據驗證規則等,你就需要使用 db.createCollection() 命令來手動創建集合。

db.createCollection(name, options)
  • name: 要創建的集合的名稱(字符串)。
  • options: 一個文檔,用于指定集合的配置選項(可選)。

示例:

db.createCollection("my_logs"); // 創建一個最簡單的集合 my_logs// 創建一個帶選項的集合
db.createCollection("capped_logs", {capped: true,        // 設置為固定大小集合size: 1024 * 1024 * 100 // 設置集合大小上限為 100MB (字節)
});// 創建一個帶數據驗證規則的集合
db.createCollection("strict_users", {validator: { // 驗證規則$jsonSchema: { // 使用 JSON Schema 標準定義驗證規則bsonType: "object", // 文檔必須是對象類型required: ["name", "age", "email"], // 必須包含 name, age, email 字段properties: { // 定義字段的規則name: {bsonType: "string",description: "must be a string and is required"},age: {bsonType: "int", // 年齡必須是整數minimum: 0,     // 最小值為 0description: "must be an integer >= 0 and is required"},email: {bsonType: "string",pattern: "^.+@.+\\..+$", // 郵箱格式驗證description: "must be a string and match the email pattern and is required"},// 其他可選字段...status: {enum: ["active", "inactive", "pending"], // status 字段的值必須是列表中的一個description: "can only be one of the enum values"}}}},validationLevel: "strict", // 驗證級別: "strict" (默認) 或 "moderate"validationAction: "error" // 驗證失敗時的動作: "error" (默認) 或 "warn"
});

createCollection 命令的常用選項詳解:

  • capped: <boolean>:設置為 true 創建一個固定大小集合 (Capped Collection)。固定大小集合有以下特點:
    • 高性能寫入:寫入速度非常快,因為它只是在集合末尾追加數據。
    • 插入順序保留:文檔始終按照插入順序存儲和讀取。
    • 達到上限時自動覆蓋:當集合達到 sizemax 指定的上限時,最老的文檔會被新的文檔自動覆蓋,就像一個循環緩沖區!🔄
    • 不支持刪除或更新導致的文檔大小增加:通常用于存儲日志、緩存、消息隊列等需要快速寫入、按時間排序且會自動清理舊數據的場景。
  • size: <number>:指定固定大小集合的最大容量(以字節為單位)。必須與 capped: true 一起使用。
  • max: <number>:指定固定大小集合的最大文檔數量。可選,與 capped: truesize 一起使用。如果同時指定了 sizemax,則哪個先達到,集合就達到上限。
  • validator: <document>:指定集合的數據驗證規則 (Schema Validation)。這是一個強大的功能,讓你在 MongoDB 的靈活模式基礎上,依然能對文檔結構和內容進行一定程度的約束!你可以使用 JSON Schema 標準或者 MongoDB 特定的驗證表達式來定義規則。
    • 驗證規則定義在一個文檔中。
    • $jsonSchema 是最推薦的方式,因為它基于標準,易于理解和維護。
    • 你可以定義字段的類型 (bsonType)、必填字段 (required)、字段的屬性規則 (properties),甚至更復雜的邏輯。
  • validationLevel: <string>:驗證級別,控制驗證規則在什么時候執行:
    • strict (默認):對所有的插入和更新操作都應用驗證規則。
    • moderate:只對現有的有效文檔應用驗證規則,對于插入操作和對無效文檔的更新才應用驗證規則。對于更新操作,如果更新會導致文檔從有效變為無效,也會應用驗證規則。
  • validationAction: <string>:驗證失敗時的動作:
    • error (默認):驗證失敗時,拒絕插入或更新操作,并拋出錯誤。
    • warn:驗證失敗時,記錄警告日志,但仍然允許插入或更新操作。
  • collation: <document>:指定集合的排序規則 (Collation)。這對于進行字符串比較操作(比如排序、字符串相等比較、范圍查詢、聚合中的分組等)非常重要,特別是當你處理非英文字符(比如中文)時。可以指定語言、大小寫敏感性、重音敏感性等。
  • storageEngine: <document>:指定集合使用的存儲引擎的特定選項。通常你不需要在這里指定,除非你有特殊的存儲引擎配置需求。MongoDB 默認使用 WiredTiger 存儲引擎。

通過 createCollection 命令并配合這些選項,你可以根據不同的業務場景,創建出滿足特定需求的“文件柜”!🎯

注意: 手動創建的空集合也會立即出現在 show collections; 列表中!不像自動創建那樣需要先有數據。

第二節:集合的“查閱”——看看這個數據庫里有哪些柜子?📂👀

想知道你當前所在的數據庫里有哪些集合?很簡單!

使用 show collections; 命令。

use mydatabase; // 切換到數據庫
show collections;

執行這個命令后,你會看到當前數據庫中所有集合的名稱列表。

注意: 這個命令只會列出當前數據庫中的集合,不會列出其他數據庫的集合。它就像是打開了當前房間的門,看看里面有哪些文件柜,而不會去隔壁房間看。🚪👀

第三節:集合的“重命名”——給文件柜換個名字!??

文件柜名字起得不好?想換個更貼切的名字?沒問題!你可以重命名一個集合。

使用 db.collection_name.renameCollection("new_name") 命令。

use mydatabase; // 切換到集合所在的數據庫
db.myoldcollection.renameCollection("mynewcollection"); // 將 myoldcollection 改名為 mynewcollection
  • db.myoldcollection: 指定要重命名的集合對象。
  • renameCollection("mynewcollection"): 調用 renameCollection 方法,并傳入新的集合名稱。

注意: 重命名操作是原子性的,它會一次性完成。重命名后,原集合名稱就不能再使用了。

第四節:集合的“銷毀”——丟掉這個文件柜!💥👋

如果某個集合的數據已經不再需要,或者整個文件柜都要扔掉,你可以刪除(銷毀)一個集合。

警告: 刪除集合是一個非常危險的操作! 一旦刪除,該集合中的所有文檔都將永久丟失不可恢復! 在執行這個操作之前,請務必再三確認,并在生產環境謹慎至極,最好先進行備份!💣💾

刪除集合的命令是 db.collection_name.drop()

  1. 首先,你需要切換到包含要刪除集合的數據庫。

  2. 然后,指定要刪除的集合名稱,并調用 drop() 方法。

    use mydatabase; // 切換到數據庫
    db.mycollection.drop(); // 刪除名為 mycollection 的集合
    

執行這個命令后,MongoDB 會返回一個結果,告訴你操作是否成功。通常你會看到 true 或者一個包含成功信息的文檔。

再運行 show collections;,你會發現剛才刪除的集合已經不見了!💨

在這里插入圖片描述

重要注意事項:

  • drop() 方法總是刪除你調用它的那個集合對象。確保你調用的是正確的集合!
  • 刪除集合的操作也需要足夠的權限,通常需要該集合所在數據庫的 dropCollectiondbAdmin 等角色權限。

第五節:集合與模式 (Schema) 的那些事兒 🤔??📄

前面我們一直強調,MongoDB 的集合是“模式靈活”的,同一個集合里的文檔可以有不同的結構。這是它與關系型數據庫“表”的最大區別之一。

這種靈活性帶來了巨大的開發便利性,特別是在數據結構不穩定或多樣化的場景。但同時,它也帶來了一些挑戰:

  • Schema on Read vs Schema on Write: 傳統關系型數據庫是“Schema on Write”,你在寫入數據前就定義好模式,寫入時強制遵守。MongoDB 則是“Schema on Read”,它不強制寫入時的模式(除非你使用了驗證規則),而是在讀取數據時由應用程序去理解和處理不同的文檔結構。這意味著你的應用程序代碼需要更靈活地處理可能存在的字段缺失或類型不匹配問題。
  • 數據一致性: 如果沒有驗證規則,同一個字段在不同文檔中可能有不同的數據類型(比如,某個文檔的 age 是數字,另一個是字符串),這可能導致查詢或聚合操作出現意外結果。

這就是為什么 MongoDB 引入了數據驗證 (Schema Validation) 這個功能!通過在集合層面定義驗證規則,你可以在享受模式靈活帶來的便利的同時,也能保證關鍵數據的結構和類型符合預期,提高數據質量和一致性!?

選擇是否使用以及使用多嚴格的驗證規則,取決于你的業務需求和對數據一致性的要求。

第六節:總結與展望 (集合篇) 🎉📄

太棒了!關于 MongoDB 的“文件柜”——集合,我們已經從它的“出生”聊到了“死亡”,還深入了解了它靈活的模式以及如何通過驗證規則進行約束!

核心要點回顧:

  • 集合是文檔的容器,模式靈活。
  • 創建可以是自動(第一次寫入數據時)或手動createCollection)。
  • createCollection 可以指定固定大小 (capped)數據驗證 (validator)排序規則 (collation) 等選項。
  • 查看集合使用 show collections;
  • 重命名集合使用 db.collection.renameCollection();
  • 刪除集合使用 db.collection.drop();危險!
  • 集合的模式靈活帶來便利和挑戰,數據驗證是平衡兩者的方式。

現在,我們已經掌握了如何在 MongoDB 這個“倉庫”中劃分“房間”(數據庫),以及如何在房間里設置“文件柜”(集合)。接下來,就該看看文件柜里那些最最核心的“文件”——文檔 (Document) 了!那可是真正的數據載體!📄

關注作者不迷路,下篇文章會講解。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81034.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81034.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81034.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Goland終端PowerShell命令失效

Goland終端Terminal的PowerShell不能使用&#xff0c;明明windows上升級了PowerShell 7設置了配置文件&#xff0c;但是只能在windows終端下使用&#xff0c;goland終端下直接失效報錯&#xff0c;安裝升級PowerShell請看Windows11終端升級PowerShell7 - HashFlag - 博客園 問…

簡單分析自動駕駛發展現狀與挑戰

一、技術進展與市場滲透 技術分級與滲透率 當前量產乘用車的自動駕駛等級以L2為主&#xff08;滲透率約51%&#xff09;&#xff0c;L3級處于初步落地階段&#xff08;滲透率約20%&#xff09;&#xff0c;而L4級仍處于測試和示范運營階段&#xff08;滲透率約11%&#xff09;2…

【C++類和數據抽象】消息處理示例(1):從設計模式到實戰應用

目錄 一、數據抽象概述 二、消息處理的核心概念 2.1 什么是消息處理&#xff1f; 2.2 消息處理的核心目標 三、基于設計模式的消息處理實現 3.1 觀察者模式&#xff08;Observer Pattern&#xff09; 3.2 命令模式&#xff08;Command Pattern&#xff09; 四、實戰場景…

【統計方法】交叉驗證:Resampling, nested 交叉驗證等策略 【含R語言】

Resampling (重采樣方法) 重采樣方法是從訓練數據中反復抽取樣本&#xff0c;并在每個&#xff08;重新&#xff09;樣本上重新調整模型&#xff0c;以獲得關于擬合模型的附加信息的技術。 兩種主要的重采樣方法 Cross-Validation (CV) 交叉驗證 &#xff1a; 用于估計測試誤…

常見的 CSS 知識點整理

1. 盒模型&#xff08;Box Model&#xff09;是什么&#xff1f;標準盒模型和 IE 盒模型的區別&#xff1f; 答案&#xff1a; CSS 盒模型將元素視為一個盒子&#xff0c;由內容&#xff08;content&#xff09;、內邊距&#xff08;padding&#xff09;、邊框&#xff08;bor…

Educational Codeforces Round 178 div2(題解ABCDE)

A. Three Decks #1.由于最后三個數會相等&#xff0c;提前算出來和&#xff0c;%3判斷&#xff0c;再判前兩個數是否大于 #include<iostream> #include<vector> #include<stdio.h> #include<map> #include<string> #include<algorithm> #…

如何創建一個導入模板?全流程圖文解析

先去找到系統內可以上傳東西的按鈕 把你的模板上傳上去,找到對應的fileName 圖里的文字寫錯了,是復制粘貼"filePath"到URL才能下載

通信原理第七版與第六版區別附pdf

介紹 我用夸克網盤分享了「通信原理 第7版》樊昌信」&#xff0c;鏈接&#xff1a;https://pan.quark.cn/s/be7c5af4cdce 《通信原理&#xff08;第7版&#xff09;》是在第6版的基礎上&#xff0c;為了適應當前通信技術發展和教學需求&#xff0c;并吸取了數十所院校教師的反…

Mysql唯一性約束

唯一性約束&#xff08;Unique Constraint&#xff09;是數據庫設計中用于保證表中某一列或多列組合的值具有唯一性的一種規則。它可以防止在指定列中插入重復的數據&#xff0c;有助于維護數據的完整性和準確性。下面從幾個方面為你詳細解釋 作用 確保數據準確性&#xff1a…

測試基礎筆記第十六天

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、UI自動化介紹1.認識UI自動化測試2.實施UI自動化測試前置條件3.UI自動化測試執行時機4.UI自動化測試核心作用和劣勢 二、認識Web自動化測試工具-Selenium021.Sel…

PaddleX的安裝

參考&#xff1a;安裝PaddlePaddle - PaddleX 文檔 1、安裝PaddlePaddle 查看 docker 版本 docker --version 若您通過 Docker 安裝&#xff0c;請參考下述命令&#xff0c;使用飛槳框架官方 Docker 鏡像&#xff0c;創建一個名為 paddlex 的容器&#xff0c;并將當前工作目…

長效住宅IP是什么?如何獲取長效住宅IP?

在當今的互聯網世界里&#xff0c;IP地址作為連接用戶與網站之間的橋梁&#xff0c;其重要性不言而喻。對于跨境電商、社交媒體運營以及數據采集等領域的專業人士而言&#xff0c;普通的IP地址已無法滿足日益復雜的需求。他們更需要一種穩定、安全且持久的長效住宅IP來完成各類…

02 業務流程架構

業務流程架構提供了自上而下的組織鳥瞰圖&#xff0c;是業務流程的全景圖。根據所采用的方法不同&#xff0c;有時被稱為流程全景圖或高層級流程圖&#xff0c;提供了業務運營中所有業務流程的整體視圖。 這樣有助于理解企業內部各個業務流程之間的相互關系以及它們如何共同工…

jenkins slave節點打包報錯Failed to create a temp file on

jenkins slave節點打包報錯 一、報錯信息 FATAL: Unable to produce a script file Also: hudson.remoting.Channel$CallSiteStackTrace: Remote call to slave-83at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1784)at hudson.remoting.UserRequest$…

什么是 Swagger 以及如何在 Spring Boot 中實現 Swagger:配置與實踐指南

在現代 RESTful API 開發中&#xff0c;Swagger 是一種廣泛使用的工具&#xff0c;用于生成、描述和可視化 API 文檔。它極大地簡化了 API 的開發、測試和維護過程。結合 Spring Boot&#xff0c;Swagger 可以快速集成到項目中&#xff0c;生成交互式 API 文檔&#xff0c;方便…

Xilinx FPGA支持的FLASH型號匯總

以博主這些年的FPGA開發使用經驗來看&#xff0c;FPGA開發的主流還是以Xilinx FPGA為主&#xff0c;貿易戰關稅戰打了這么多年&#xff0c;我們做研發的也不可避免的要涉及一些國產替代的工作&#xff1b;這里把Xilinx FPGA官方支持的各類&#xff08;國產和非國產&#xff09;…

第3講:ggplot2完美入門與美化細節打磨——從基礎繪制到專業級潤色

目錄 1. 為什么選擇ggplot2? 2. 快速了解ggplot2繪圖核心邏輯 3. 基礎繪圖示范:柱狀圖、折線圖、散點圖 (1)簡單柱狀圖 (2)折線圖示范 (3)高級散點圖 + 擬合線 4. 精細美化:細節打磨決定專業感 5. 推薦的美化小插件(可選進階) 6. 小練習:快速上手一幅美化…

Vue3 上傳后的文件智能預覽(實戰體會)

目錄 前言1. Demo12. Demo2 前言 &#x1f91f; 找工作&#xff0c;來萬碼優才&#xff1a;&#x1f449; #小程序://萬碼優才/r6rqmzDaXpYkJZF 爬蟲神器&#xff0c;無代碼爬取&#xff0c;就來&#xff1a;bright.cn 此處的基本知識涉及較少&#xff0c;主要以Demo的形式供大…

transformer-實現單層Decoder 層

Decoder Layer 論文地址 https://arxiv.org/pdf/1706.03762 解碼器層結構 Transformer解碼器層由三種核心組件構成&#xff1a; Masked多頭自注意力&#xff1a;關注解碼器序列當前位置之前的上下文&#xff08;因果掩碼&#xff09; Encoder-Decoder多頭注意力&#xff1a;關…

設計模式每日硬核訓練 Day 16:責任鏈模式(Chain of Responsibility Pattern)完整講解與實戰應用

&#x1f504; 回顧 Day 15&#xff1a;享元模式小結 在 Day 15 中&#xff0c;我們學習了享元模式&#xff08;Flyweight Pattern&#xff09;&#xff1a; 通過共享對象&#xff0c;分離內部狀態與外部狀態&#xff0c;大量減少內存開銷。適用于字符渲染、游戲場景、圖標緩…