MongoDB 的介紹
MongoDB 是一個開源的非關係型資料庫系統,採用 C++ 編寫,旨在處理大量資料儲存和高吞吐量的應用程式。MongoDB 使用 JSON 風格的文件儲存資料,具有高度的靈活性和效能。
主要特點:
- 非關係型資料庫:不採用傳統的關係型資料庫表格模型,而是使用文件儲存模型。
- 高效能:支援在叢集中水平擴充套件,能夠處理大規模的資料儲存和高併發訪問。
- 靈活的資料模型:文件儲存模型支援巢狀文件和陣列,適合儲存複雜的資料結構。
- 豐富的功能:提供豐富的查詢語言、支援多種索引、資料複製和故障恢復機制。
SQL 和 NoSQL 的區別
在關係型資料庫(SQL)和非關係型資料庫(NoSQL)之間,主要區別在於資料的組織方式和資料模型:
-
SQL 資料庫:採用表格模型,資料按照預定義的結構儲存,具有嚴格的一致性和事務支援。
- 資料結構:資料庫 > 表 > 行 > 列
- 例子:MySQL、PostgreSQL、Oracle
-
NoSQL 資料庫:採用多種資料模型,如文件儲存、鍵值對、列儲存和圖形資料庫,適用於資料結構較為靈活的場景。
- 資料結構:資料庫 > 集合(Collection) > 文件(Document) > 欄位(Field)
- 例子:MongoDB、Redis、Cassandra
MongoDB 的安裝
MongoDB 的安裝步驟:
- 下載 MongoDB 安裝包:從 MongoDB 官網下載對應版本的安裝包。
- 安裝 MongoDB:按照官方文件指引安裝 MongoDB。
- 配置 MongoDB:根據需要配置 MongoDB 的資料目錄、日誌檔案路徑等。
- 啟動 MongoDB 服務:啟動 mongod 程序以及可選的配置選項。
MongoDB 的簡單使用
本地測試啟動(功能受限)
在本地測試中,可以使用預設配置啟動 MongoDB:
# 啟動 MongoDB mongod # 連線 MongoDB Shell mongo
生產方式啟動(完整內容)
在生產環境中,需要配置更多的引數,例如資料目錄、日誌輸出、認證等:
# 啟動 MongoDB(示例) mongod --dbpath /path/to/data --logpath /path/to/log/mongod.log --fork
MongoDB 的資料庫操作和集合操作
MongoDB 中的操作以資料庫和集合為單位:
-
資料庫操作:
# 切換資料庫 use your_database_name # 顯示當前資料庫 db
-
集合操作:
# 建立集合 db.createCollection("your_collection") # 檢視集合列表 show collections
MongoDB 的資料型別
MongoDB 支援多種資料型別,包括字串、整數、浮點數、日期、陣列、巢狀文件等。
MongoDB 插入、查詢、修改和刪除資料
MongoDB 支援豐富的資料操作:
-
插入資料:
db.collection_name.insertOne({ key: value });
-
查詢資料:
db.collection_name.find({ key: value });
-
修改資料:
db.collection_name.updateOne({ filter }, { $set: { key: new_value } });
-
刪除資料:
db.collection_name.deleteOne({ filter });
MongoDB 的聚合管道
MongoDB 的聚合管道允許對資料進行多個階段的處理和轉換,如分組、排序、篩選等:
-
分組管道:
db.collection_name.aggregate([ { $group: { _id: "$key", total: { $sum: "$value" } } } ]);
-
其他管道:
db.collection_name.aggregate([ { $match: { key: value } }, { $sort: { key: 1 } }, { $skip: 10 }, { $limit: 5 } ]);
MongoDB 索引和許可權管理
-
索引:MongoDB 支援多種索引型別,如單欄位索引、複合索引、文字索引等。
db.collection_name.createIndex({ key: 1 });
-
許可權管理:MongoDB 支援建立和管理使用者及其許可權,保障資料安全性。
pymongo 使用
pymongo
是 Python 中操作 MongoDB 的官方驅動程式:
pip install pymongo
使用示例:
from pymongo import MongoClient # 連線 MongoDB client = MongoClient('mongodb://localhost:27017/') # 獲取資料庫和集合 db = client.your_database_name collection = db.your_collection_name # 插入資料 data = {"key": "value"} result = collection.insert_one(data) # 查詢資料 query = {"key": "value"} result = collection.find(query) # 修改資料 update_query = {"key": "value"} new_value = {"$set": {"key": "new_value"}} result = collection.update_one(update_query, new_value) # 刪除資料 delete_query = {"key": "value"} result = collection.delete_one(delete_query)