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} } );