文章目錄
- 一、MongoDB 簡介
- 基本信息
- 特點
- 內部組件
- 二、MongoDB 部署
- 1. 安裝依賴
- 2. 解壓部署并配置環境變量
- 3. 修改配置文件以及啟動服務
- 4.數據庫權限管理
- 三、MongoDB 管理
- 1. 角色權限
- 2. 操作命令
- 用戶管理命令
- 常用命令(Mongo4.2.8)
- 數據庫相關
- 用戶相關
- 集合 Collection 相關

一、MongoDB 簡介
基本信息
MongoDB 是由 C++ 語言編寫的,基于分布式文件存儲的開源數據庫系統。在高負載情況下,可通過添加更多節點保證服務器性能。它旨在為 WEB 應用提供可擴展的高性能數據存儲解決方案。MongoDB 將數據存儲為文檔,數據結構由鍵值(key=>value)對組成,其文檔類似于 JSON 對象,字段值可以包含其他文檔、數組及文檔數組。
- 官方文檔:https://docs.mongodb.com/manual/?_ga=2.57024426.1834178963.1557492386 - 816165234.155749238
- 官方下載地址:https://www.mongodb.com/download-center/community
特點
- 高性能:提供高性能的數據持久性,支持嵌入式數據模型,減少數據庫系統上的 I/O 操作;索引支持快速查詢,可包含嵌入式文檔和數組中的鍵。
- 豐富的語言查詢:支持豐富的查詢語言,用于讀寫操作(CRUD)、數據匯總、文本搜索和地理空間索引。
- 高可用性:復制工具(副本集)提供自動故障轉移和數據冗余。
- 水平可擴展性:分片功能可將數據分布在一組計算機上,提供可擴展性。
- 支持多種存儲引擎:如 WiredTiger 存儲引擎、MMAPv1 存儲引擎和 InMemory 存儲引擎。
內部組件
- MongoDB Drivers:官方 MongoDB 客戶端庫,提供 C、C++、C#、Java、Node.JS、Perl、PHP、Python、Ruby 和 Scala 驅動程序的參考指南。
- MongoDB Stitch:為開發人員提供訪問 MongoDB 和其他后端服務的 API,保持 MongoDB 功能和靈活性,支持細粒度的數據訪問控制配置。
- MongoDB Atlas:MongoDB 在云中部署、操作和擴展的最佳方式,適用于 AWS、Azure 和 Google Cloud Platform,可輕松遷移數據,零停機。
- MongoDB Cloud Manager:用于管理 MongoDB 部署的軟件包,提供監控和備份功能,幫助用戶優化群集并降低操作風險。
- MongoDB Charts:可快速簡單地創建 MongoDB 可視化圖表。
- MongoDB Connector for BI:允許用戶使用 SQL 創建查詢,并使用現有的關系商業智能工具(如 Tableau、MicroStrategy 和 Qlik)對 MongoDB Enterprise 數據進行可視化、圖形化和報告。
- MongoDB Compass:通過隨機抽樣文檔子集,為用戶提供 MongoDB 模式的圖形視圖,降低對數據庫的影響并快速產生結果。
- MongoDB Spark Connector:可訪問所有使用 MongoDB 數據集的 Spark 庫,支持 SQL 分析、流式傳輸、機器學習和圖形 API,也可與 Spark Shell 配合使用。
二、MongoDB 部署
1. 安裝依賴
yum install libcurl openssl -y
2. 解壓部署并配置環境變量
tar xvf mongodb-linux-x86_64-rhel70-4.4.6.tgz
mv mongodb-linux-x86_64-rhel70-4.4.6 /usr/local/mongodb
mkdir /usr/local/mongodb/{conf,data,logs}vi /etc/profile
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
3. 修改配置文件以及啟動服務
cd /usr/local/mongodb/
vi conf/mongodb.conf
port=39096
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/logs/mongodb.log
bind_ip=0.0.0.0
#auth=true ### 開啟登錄認證,配置完用戶名密碼在進行開啟# 啟動服務
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/mongodb.conf --logappend# 連接 mongodb
mongo --port 39096 -uaexcom --authenticationDatabase trade -p
4.數據庫權限管理
// 創建并切換數據庫
use trade
// 創建用戶并授權數據庫
db.createUser({user:"aexcom",pwd:"xxx=",roles:[{role:"readWrite",db:"trade"}]})// 驗證是否登錄成功
use trade
db.auth("aexcom","xxx=")
三、MongoDB 管理
1. 角色權限
- Read:允許用戶讀取指定數據庫。
- readWrite:允許用戶讀寫指定數據庫。
- dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問 system.profile。
- userAdmin:允許用戶向 system.users 集合寫入,可在指定數據庫里創建、刪除和管理用戶。
- clusterAdmin:只在 admin 數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
- readAnyDatabase:只在 admin 數據庫中可用,賦予用戶所有數據庫的讀權限。
- readWriteAnyDatabase:只在 admin 數據庫中可用,賦予用戶所有數據庫的讀寫權限。
- userAdminAnyDatabase:只在 admin 數據庫中可用,賦予用戶所有數據庫的 userAdmin 權限。
- dbAdminAnyDatabase:只在 admin 數據庫中可用,賦予用戶所有數據庫的 dbAdmin 權限。
- root:只在 admin 數據庫中可用,超級賬號,擁有超級權限。
2. 操作命令
用戶管理命令
db.auth() // 將用戶驗證到數據庫。
db.changeUserPassword() // 更改現有用戶的密碼。
db.createUser() // 創建一個新用戶。
db.dropUser() // 刪除單個用戶。
db.dropAllUsers() // 刪除與數據庫關聯的所有用戶。
db.getUser() // 返回有關指定用戶的信息。
db.getUsers() // 返回有關與數據庫關聯的所有用戶的信息。
db.grantRolesToUser() // 授予用戶角色及其特權。
db.removeUser() // 已過時,從數據庫中刪除用戶。
db.revokeRolesFromUser() // 從用戶中刪除角色。
db.updateUser() // 更新用戶數據。
常用命令(Mongo4.2.8)
數據庫相關
// 切換/創建數據庫
use "dbname";
// 查詢所有數據庫
show dbs;
// 查看當前使用的數據庫
db.getName();
// 查看數據庫版本
db.version();
// 查看當前 db 的鏈接地址
db.getMongo();
用戶相關
// 創建普通用戶(創建用戶 cg,對 mytest 數據庫讀寫權限)
db.createUser({user:"cg",pwd:"lianshi",roles:[{role:"readWrite",db:"mytest"}]})
// 刪除用戶
db.dropUser("yonghu")
// 修改用戶密碼
db.updateUser("cg",{pwd:"123456"})
// 進入數據 mytest,用戶名密碼認證
db.auth("cg","lianshi");
集合 Collection 相關
// 獲得數據聚合(表)
db.getCollectionNames();
// 集合(表)插入數據
db.student.insert({"id":"2","name":"yxy"})
// 查詢數據
db.student.find();
// 查詢唯一字段值
db.student.distinct("name");
// 查詢 name = yxy 的記錄
db.student.find({"name":"yxy"});
// 插入 int32 字段類型的數據
db.student.insert({"id":NumberInt(1234567),"name":"hu"});
// 插入 int64 字段類型數據
db.student.insert({"age":NumberLong(22),"name":"hu"});
// 插入 Decimal 字段類型數據
db.student.insert({"va":NumberDecimal("22.3"),"name":"hu"});
// 查詢語句
db.student.find({}).projection({}).sort({_id:-1}).limit(100)
// 刪除(集合)表
db.student.drop();