MongoDB 從入門到實踐:全面掌握文檔型 NoSQL 數據庫核心操作

目錄

一、MongoDB 基礎準備

1. 官方資源獲取

2. 安裝步驟解析

二、MongoDB 核心指令詳解

1. 數據庫操作指令

2. 集合操作指令

3. 文檔操作指令

查詢文檔

插入文檔

修改文檔

刪除文檔

三、進階查詢技巧

1. 運算符的靈活運用

比較運算符

邏輯運算符

范圍與成員運算符

2. 映射、排序與分頁

字段映射

排序操作

分頁查詢

四、用戶管理與安全認證

1. 創建用戶

2. 連接認證方式

連接字符串認證

參數認證

命令行認證

五、總結與最佳實踐

實用建議:


在當今數據爆炸的時代,非關系型數據庫(NoSQL)憑借其靈活的架構和出色的擴展性,成為處理海量非結構化數據的首選。其中,MongoDB 作為文檔型 NoSQL 數據庫的代表,以其易用性和強大功能被廣泛應用于電商、社交、物聯網等各類場景。本文將從 MongoDB 的基礎安裝開始,逐步深入到核心指令、進階查詢和用戶管理,幫助開發者快速掌握 MongoDB 的實用技能。

一、MongoDB 基礎準備

1. 官方資源獲取

MongoDB 的官方網站是學習和獲取資源的首要渠道,中文官網地址為:https://www.mongodb.com/zh-cn。在官網中,你可以找到最新的版本信息、詳細的文檔以及相關工具下載(如 MongoDB Community Server、MongoDB Compass 等)。

2. 安裝步驟解析

MongoDB 的安裝過程相對簡單,但需要注意不同操作系統的差異。以下是安裝的核心要點:

  • 環境檢查

在安裝前,需確保操作系統滿足 MongoDB 的運行要求:

    • 磁盤空間:至少預留 1GB 以上可用空間
    • 操作系統:Windows 10 及以上 / 主流 Linux 發行版(如 Ubuntu 20.04+、CentOS 7+)/macOS 10.15+
    • 依賴庫:Linux 系統需提前安裝libcurl、openssl等基礎依賴
  • 安裝配置
 

mongod --version # 查看服務端版本

mongo --version # 查看客戶端版本

    1. 從官網下載對應操作系統的安裝包(推薦使用穩定版)
    1. Windows 系統:運行安裝程序,選擇 "Custom" 自定義安裝路徑(建議路徑不含中文和空格),勾選 "Install MongoDB Compass" 安裝可視化工具
    1. Linux 系統:通過tar包解壓或包管理器安裝,配置數據存儲目錄(默認/data/db)和日志目錄
    1. 環境變量配置:將 MongoDB 的bin目錄添加到系統 PATH,驗證安裝是否成功:

二、MongoDB 核心指令詳解

1. 數據庫操作指令

 

# 查看所有非空數據庫

show dbs

# 查看當前所在數據庫

db

# 切換/創建數據庫(插入數據后才會實際創建)

use mydatabase

# 刪除當前數據庫(謹慎操作!)

db.dropDatabase()

?? 注意:新創建的數據庫在未插入數據前,使用show dbs不會顯示

2. 集合操作指令

集合類似于關系型數據庫中的表,以下是常用操作:

 

# 查看當前數據庫所有集合

show collections

# 創建集合(可指定可選參數如最大文檔數、大小限制等)

db.createCollection("users")

# 刪除指定集合

db.users.drop()

💡 提示:MongoDB 支持動態創建集合,插入文檔時若集合不存在會自動創建:db.products.insertOne({name:"手機"})

3. 文檔操作指令

文檔是 MongoDB 的數據基本單位(JSON 格式),支持豐富的 CRUD 操作:

查詢文檔
 

# 查詢集合所有文檔(返回游標,默認顯示前20條)

db.users.find({})

# 查詢集合第一條文檔

db.users.findOne({})

# 格式化輸出查詢結果

db.users.find({}).pretty()

插入文檔
 

# 插入單個文檔

db.users.insertOne({

name: "張三",

age: 25,

email: "zhangsan@example.com"

})

# 插入多個文檔

db.users.insertMany([

{name: "李四", age: 30, email: "lisi@example.com"},

{name: "王五", age: 28, email: "wangwu@example.com"}

])

修改文檔
 

# 更新符合條件的第一個文檔

db.users.updateOne(

{name: "張三"}, # 查詢條件

{$set: {age: 26, email: "new_zhangsan@example.com"}} # 更新內容

)

# 更新所有符合條件的文檔

db.users.updateMany(

{age: {$lt: 30}}, # 年齡小于30的文檔

{$set: {status: "young"}} # 添加狀態字段

)

?? 注意:$set操作符用于指定更新的字段,若不使用$set會替換整個文檔

刪除文檔
 

# 刪除符合條件的第一個文檔

db.users.deleteOne({name: "張三"})

# 刪除所有符合條件的文檔

db.users.deleteMany({age: {$gt: 40}}) # 刪除年齡大于40的文檔

三、進階查詢技巧

1. 運算符的靈活運用

MongoDB 提供豐富的查詢運算符,滿足復雜查詢需求:

比較運算符

運算符

說明

示例

$gt

大于

db.users.find({age: {$gt: 30}})

$gte

大于等于

db.users.find({age: {$gte: 20}})

$lt

小于

db.users.find({age: {$lt: 30}})

$lte

小于等于

db.users.find({age: {$lte: 30}})

$eq

等于(可省略)

db.users.find({age: 30})

$ne

不等于

db.users.find({age: {$ne: 30}})

邏輯運算符
 

# AND條件查詢(兩種寫法)

db.users.find({age: 30, name: {$ne: "t3"}}) # 簡單條件

db.users.find({$and: [{age: {$gt: 20}}, {age: {$lt: 30}}]}) # 復雜條件

# OR條件查詢

db.users.find({$or: [{age: 20}, {age: 25}]})

# NOT條件查詢

db.users.find({age: {$not: {$gt: 25}}}) # 年齡不大于25(即≤25)

范圍與成員運算符
 

# 范圍查詢(25<age<35)

db.users.find({age: {$gt: 25, $lt: 35}})

# 成員查詢(age是20或25)

db.users.find({age: {$in: [20,25]}})

# 排除查詢(age不是20或25)

db.users.find({age: {$nin: [20,25]}})

2. 映射、排序與分頁

字段映射

控制查詢結果返回的字段:

 

# 只返回name和age字段(_id默認返回,需顯式排除)

db.users.find({}, {name: 1, age: 1, _id: 0})

💡 提示:1 表示包含字段,0 表示排除字段,兩種方式不能混用(除了排除_id)

排序操作
 

# 按age降序排序(pymongo中使用)

db.users.find({}, {_id: 0}).sort("age", pymongo.DESCENDING)

# 多字段排序:先按age降序,再按name降序

db.users.find({}, {_id: 0}).sort([("age", pymongo.DESCENDING), ("name", pymongo.DESCENDING)])

注意:shell 環境中可直接使用 1(升序)和 - 1(降序):sort({age: -1})

分頁查詢
 

# 限制返回2條結果

db.users.find({}, {_id: 0}).limit(2)

# 分頁查詢:跳過前2條,返回1條(實現第3條數據查詢)

db.users.find({}, {_id: 0}).skip(2).limit(1)

最佳實踐:分頁查詢建議結合排序使用,確保結果順序一致

四、用戶管理與安全認證

1. 創建用戶

MongoDB 默認無需認證即可訪問,生產環境需開啟認證機制:

 

# 切換到admin數據庫

use admin

# 創建管理員用戶

db.createUser({

user: "admin",

pwd: "admin123",

roles: [{role: "root", db: "admin"}] # 超級管理員角色

})

# 創建普通用戶(指定數據庫權限)

use mydatabase

db.createUser({

user: "zzy",

pwd: "123456",

roles: [{role: "readWrite", db: "mydatabase"}] # 讀寫權限

})

創建完成后需重啟 MongoDB 服務并開啟認證:

 

# Linux系統啟動命令

mongod --auth --dbpath /data/db --logpath /var/log/mongodb.log --fork

2. 連接認證方式

連接字符串認證
 

# Python連接示例

import pymongo

client = pymongo.MongoClient(

f"mongodb://zzy:123456@localhost:27017/mydatabase?authSource=admin"

)

參數認證
 

client = pymongo.MongoClient(

host="localhost",

port=27017,

username='zzy',

password='123456',

authSource='admin' # 認證數據庫,通常為admin

)

命令行認證
 

# 命令行連接并認證

mongo -u zzy -p 123456 --authenticationDatabase admin

五、總結與最佳實踐

本文詳細介紹了 MongoDB 的安裝配置、核心操作指令、進階查詢技巧以及用戶安全管理。作為文檔型 NoSQL 數據庫的佼佼者,MongoDB 憑借其schema 靈活性水平擴展能力豐富的查詢功能,在現代應用開發中占據重要地位。

實用建議:

  1. 生產環境務必開啟認證機制,根據業務需求分配最小權限角色
  1. 復雜查詢建議創建索引提升性能:db.users.createIndex({name: 1})
  1. 批量操作優先使用insertMany、updateMany等批量指令減少網絡交互
  1. 定期備份數據:使用mongodump工具進行數據備份

MongoDB 還有更多高級特性值得探索,如聚合管道、地理空間查詢、分片集群等。掌握本文內容后,你已具備 MongoDB 的基礎開發能力,可在實際項目中進一步實踐深化。

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

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

相關文章

CVPR2025丨遙感領域,全模態與秒超高清遙感建模重大突破,性能提升創新點

關注gongzhonghao【CVPR頂會精選】剛入門遙感建模時&#xff0c;總好奇別人為什么總能提出新方法&#xff1f;慢慢摸索后才發現&#xff0c;創新點并不是硬憋出來的&#xff0c;而是要從數據特性、傳感器差異、地物細節以及環境變化中發現機會。不同波段、不同分辨率、不同時相…

HTML5詳篇

前端三劍客 前端三劍客是指HTML、CSS和JavaScript: HTML超文本標記語言(Hyper Text Markup Language):簡單理解描述網頁結構的;用于網頁內容的語言。它通過使用不同的HTML標簽來定義頁面中的各種元素,例如標題、段落、圖像、鏈接等【無羽毛的小鳥模型】 CSS層疊樣式表(…

【Transient-Free 3DGS】delayed densification + coarse to fine增加GS的魯棒性

25年最新連接去除場景瞬態對象工程與3DGS的pipeline&#xff0c;改進了spotlesssplats&#xff0c;已開源&#xff1a; [2506.02751] RobustSplat: Decoupling Densification and Dynamics for Transient-Free 3DGSAbstract page for arXiv paper 2506.02751: RobustSplat: De…

【MySQL】CRUD基礎詳解

CRUD基礎前言&#xff1a;數據庫的層級結構一、新增&#xff08;Create&#xff09;1. 單行數據 全列插入2. 單行數據的簡寫插入3. 指定列插入4. 多行數據插入二、查詢&#xff08;Retrieve&#xff09;1. 全列查詢2. 指定列查詢3. 查詢結果為表達式&#xff08;1&#xff09;…

互聯網大廠Java求職面試實錄:核心技術棧與業務場景解析

互聯網大廠Java求職面試實錄&#xff1a;核心技術棧與業務場景解析 面試場景設定 本文通過一個嚴肅的面試官和搞笑的水貨程序員大面條之間的對話&#xff0c;模擬互聯網大廠Java崗位的技術面試過程。面試涵蓋Java SE、Spring生態、數據庫、微服務、緩存、安全、消息隊列、AI等多…

response對象的elapsed屬性

在Python的requests庫中&#xff0c;當我們發送一個請求后&#xff0c;會得到一個Response對象&#xff0c;這個對象有一個elapsed屬性&#xff0c;它返回一個timedelta對象&#xff0c;表示從發送請求到收到響應所經過的時間。response.elapsed.total_seconds() 是 Python req…

【ansible】5.在受管主機部署文件和Jinja2模板

1.Ansible 中&#xff0c;如何用模塊創建一個文件并設置權限644并設置SELinux類型&#xff0c;如何從受管主機中刪除文件&#xff1f;使用ansible.builtin集合中的 file 模塊&#xff0c;添加state&#xff1a;touch 創建文件&#xff0c;mode&#xff1a;‘0644’ 設置權限&am…

雪花算法數據庫主鍵

雪花算法&#xff08;Snowflake&#xff09;作為一種分布式 ID 生成方案&#xff0c;在分布式系統中具有顯著優勢&#xff0c;能夠解決多個關鍵問題。以下是它的核心好處及主要應用場景&#xff1a;雪花算法的核心好處全局唯一性&#xff1a;通過時間戳、機器 ID、數據中心 ID …

C/C++ 頭文件命名約定

有的時候&#xff0c;在C的代碼中&#xff0c;可以看到有如下的頭文件引用的代碼: #include <iostream> #include <unistd.h> #include <csignal>其中有一些是引用了.h文件&#xff0c;另外一些是引用了模塊式的比如iostream和csignal&#xff0c;那么為什么…

異質結3.0時代的降本提效革命:捷造科技設備技術創新與產業拐點分析

光伏產業經歷了從PERC到TOPCon和異質結&#xff08;HJT&#xff09;的技術迭代&#xff0c;而2025年將成為異質結技術規模化應用的關鍵轉折點。捷造科技通過一系列突破性技術創新&#xff0c;將GW級異質結整線設備價格降至2億元&#xff0c;較行業平均水平降低約40%&#xff0c…

【網絡】http 協議中 Vary 標頭的作用

在 HTTP 協議中&#xff0c;Vary 標頭是一個關鍵的緩存控制機制&#xff0c;用于告知緩存服務器&#xff08;或代理&#xff09;&#xff1a;響應內容的生成依賴于請求中的哪些特定頭部字段。其核心作用是確保緩存服務器能根據這些字段的差異&#xff0c;正確區分和返回不同版本…

CSS 進階用法

一、選擇器進階復雜選擇器組合詳解后代選擇器后代選擇器使用空格分隔兩個選擇器&#xff0c;例如div p&#xff0c;表示選擇div元素內所有的p元素。這種選擇方式會匹配所有層級的后代元素&#xff0c;包括子元素、孫元素等任意深度的嵌套元素。應用示例&#xff1a;/* 選中arti…

GitHub 熱榜項目 - 日榜(2025-08-23)

GitHub 熱榜項目 - 日榜(2025-08-23) 生成于&#xff1a;2025-08-23 統計摘要 共發現熱門項目&#xff1a;13 個 榜單類型&#xff1a;日榜 本期熱點趨勢總結 本期GitHub熱榜呈現三大技術熱點&#xff1a;1&#xff09;AI工作流構建成為風口&#xff0c;sim和airi等項目展示…

SHAP分析+KOA-RIME開普勒結合霜冰算法雙重優化BP神經網絡+9種映射方法+新數據預測!機器學習可解釋分析!

代碼主要功能 該Matlab代碼實現了一個KOA-RIME開普勒結合霜冰算法雙重優化的BP神經網絡回歸模型&#xff0c;結合特征貢獻度分析&#xff08;SHAP&#xff09;和新數據預測功能。核心功能包括&#xff1a; 雙重參數優化&#xff1a;先用智能算法&#xff08;以chebyshev映射改進…

【數據結構】棧和隊列——棧

目錄棧和隊列棧棧的基本概念棧的順序存儲實現棧的定義與初始化入棧操作出棧操作讀取棧頂元素判空和判滿操作棧的銷毀操作操作集合棧和隊列 棧 棧的基本概念 棧的定義&#xff1a; 棧&#xff08;Stack&#xff09; 是一種線性表&#xff0c;它限定了數據元素的插入和刪除操…

大數據管理與應用系列叢書《數據挖掘》讀書筆記之集成學習(1)

文章目錄前言一、集成學習是什么&#xff1f;1.基本思想2.集成學習的類型3. 集成學習的結合策略3.1 為什么結合策略是集成學習的靈魂&#xff1f;3.2 經典策略(1)**投票法&#xff08;Voting&#xff09;****(2)平均法&#xff08;Averaging&#xff09;****(3) 學習法**3.3 關…

嵌入式知識篇---32GUI

要理解 32 位單片機的 GUI&#xff0c;咱們先從 “基礎概念” 入手&#xff0c;再拆成 “為什么能跑 GUI”“核心組成”“怎么實現”“常用工具”“實際用途” 這幾步講&#xff0c;全程不用復雜術語&#xff0c;像聊日常用品一樣說清楚。一、先搞懂 2 個基礎概念在講 “32 位單…

【iOS】SDWebImage第三方庫源碼學習筆記

前言之前在寫項目時&#xff0c;經常用到SDWebImage這個第三方庫來加載圖片&#xff0c;并且了解到了這個第三方庫在處理圖片時自帶異步下載和緩存功能&#xff0c;以及對cell復用的處理。這篇文章來系統學習一下SDWebImage第三方庫的知識以及底層原理簡介SDWebImage為UIImageV…

Linux --網絡基礎概念

一.網絡發展獨立模式&#xff1a;在早期計算機之間是相互獨立的&#xff0c;機器之間的數據只能通過軟硬盤來傳輸&#xff0c;這就代表無法同時完成任務&#xff0c;需要前面的計算機完成各自的任務經過硬盤傳遞數據再完成自己的任務&#xff0c;效率十分低下。網絡互聯&#x…

教育系統搭建攻略:線上知識付費與線下消課排課全解析

作為一名資深平臺測評師&#xff0c;最近我挖到了一個教育機構的 “寶藏工具”—— 喬拓云教育系統。別看它名字低調&#xff0c;用起來那叫一個順手&#xff0c;線上知識付費、線下消課排課全給你安排得明明白白&#xff0c;簡直是機構老板和教務員的 “摸魚神器”。多端口管理…