MongoDB快速入門指南與docker-compose快體驗
MongoDB相對於RDBMS的優勢
- 模式少 -MongoDB是一個文檔數據庫,其中一個集合包含不同的文檔。一個文檔之間的字段數,內容和文檔大小可能會有所不同。
- 單個對象的結構清晰。
- 沒有復雜的聯接。
- 深入的查詢能力。MongoDB支持使用與SQL幾乎一樣強大的基於文檔的查詢語言對文檔進行動態查詢。
- sql Tuning(優化)
- 易於擴展
- 不需要將應用程序對象轉換/映射到數據庫對象。
- 使用內部存儲器存儲(窗口式)工作集,從而可以更快地訪問數據
RDBMS:關系數據庫管理系統
為什么要使用MongoDB
- 面向文檔的存儲,BSON格式存儲,即Binary JSON
- 單鍵索引、復合索引、多鍵索引、地理空間索引、全文本索引和哈希索引
- MongoDB實現高可用 主從復制
- 自動分片 auto sharding
- 豐富的查詢
- 快速原地更新(fast in-place updates):大部分更新操作無需申請新空間
- MongoDB的專業支持map/reduce支持
- Gridfs:各種size大小的集群文件支持
在哪里使用MongoDB
- 大數據
- 內容管理和交付
- 移動和社交基礎設施
- 用戶數據管理
- 數據中心
docker-compose 快速啟動 MongoDB
docker-compose.yml
version: '3'
services:
mongodb:
image: mongo:4.2.6 # 鏡像:版本
container_name: mongo_db
environment:
- MONGO_INITDB_DATABASE=默認的數據庫
- MONGO_INITDB_ROOT_USERNAME=你的root管理員名稱
- MONGO_INITDB_ROOT_PASSWORD=你的root管理員名稱密碼
volumes:
- ./mongo/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
- ./mongo/mongo-volume:/data/db
ports:
- "27017-27019:27017-27019"
restart: always
init-mongo.js
// db.getSiblingDB() 相當於 use admin;
db.getSiblingDB('admin')
.createUser({
user: 'user',
pwd: 'user',
roles: ['readWrite']
});
然后執行命令
docker-compose up -d
Navicat Premium連接
填入上述 docker-compose.yml 對應的參數
測試連接,測試成功
如果你的不顯示,去
navicat ==》 菜單 ==》 顯示 ==》鈎上顯示隱藏的項目
重啟navicat就可以了
打開一個集合右下角可以查看
- 網格視圖
- 樹視圖
- JSON視圖
增刪改查
1.創建操作
- db.collection.insertOne()
- db.collection.insertMany()
// 插入集合名稱為products的集合並插入數據 (不存在集合會新建)
db.products.insertOne({
item: "card",
qty: 15
});
// 批量插入數據
db.products.insertMany([{
item: "card1",
qty: 16
}, {
item: "card2",
qty: 17
}, {
item: "envelope",
qty: 20
}, {
item: "stamps",
qty: 30
}]);
2.查詢操作
- db.collection.find()
db.products.find({ qty: 15 }).limit(1)
3.更新操作
- db.collection.updateOne()
db.collection.updateOne(filter,update,options)
查找與過濾器匹配的第一個文檔,並應用指定的更新修改。
db.products.find({
item: "stamps"
}).limit(1);
// 找到item為stamps的並修改其qty為60
db.products.updateOne(
{
"item": "stamps"
},
{
$set: {
"qty": 60
}
}
);
db.products.find({
item: "stamps"
}).limit(1);
- db.collection.updateMany()
// 把qty大於15的統統修改為15
db.products.updateMany(
{
qty: {
$gt: 15
}
},
{
$set: {
"qty": 15
}
}
);
- db.collection.replaceOne()
使用替換文檔替換集合中與過濾器匹配的第一個匹配文檔。
// 把集合products中item為stamps 整個替換掉
db.products.replaceOne(
{ "item" : "stamps" },
{ "item" : "stampss", "Borough" : "Manhattan" }
);
4.刪除操作
// 刪除item為stampss的
db.products.deleteOne( { "item" : "stampss" } );
// 批量刪除qty小於15的
db.products.deleteMany( { "qty" : {$lt: 15} } );