MongoDB快速入門指南與docker-compose快體驗


MongoDB快速入門指南與docker-compose快體驗

MongoDB相對於RDBMS的優勢

  1. 模式少 -MongoDB是一個文檔數據庫,其中一個集合包含不同的文檔。一個文檔之間的字段數,內容和文檔大小可能會有所不同。
  2. 單個對象的結構清晰。
  3. 沒有復雜的聯接。
  4. 深入的查詢能力。MongoDB支持使用與SQL幾乎一樣強大的基於文檔的查詢語言對文檔進行動態查詢。
  5. sql Tuning(優化)
  6. 易於擴展
  7. 不需要將應用程序對象轉換/映射到數據庫對象。
  8. 使用內部存儲器存儲(窗口式)工作集,從而可以更快地訪問數據

RDBMS:關系數據庫管理系統

為什么要使用MongoDB

  1. 面向文檔的存儲,BSON格式存儲,即Binary JSON
  2. 單鍵索引、復合索引、多鍵索引、地理空間索引、全文本索引和哈希索引
  3. MongoDB實現高可用 主從復制
  4. 自動分片 auto sharding
  5. 豐富的查詢
  6. 快速原地更新(fast in-place updates):大部分更新操作無需申請新空間
  7. MongoDB的專業支持map/reduce支持
  8. Gridfs:各種size大小的集群文件支持

在哪里使用MongoDB

  1. 大數據
  2. 內容管理和交付
  3. 移動和社交基礎設施
  4. 用戶數據管理
  5. 數據中心

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

image.png
填入上述 docker-compose.yml  對應的參數
測試連接,測試成功
image.png
如果你的不顯示,去

navicat ==》 菜單 ==》  顯示 ==》鈎上顯示隱藏的項目

重啟navicat就可以了

image.png

打開一個集合右下角可以查看

  • 網格視圖
  • 樹視圖
  • JSON視圖

增刪改查

1.創建操作

  • db.collection.insertOne()
  • db.collection.insertMany()

image.png

// 插入集合名稱為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()

image.png

db.products.find({ qty: 15 }).limit(1)

3.更新操作

  • db.collection.updateOne()

db.collection.updateOne(filter,update,options)

查找與過濾器匹配的第一個文檔,並應用指定的更新修改。

image.png

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()

image.png

// 把qty大於15的統統修改為15
db.products.updateMany(
    {
        qty: {
            $gt: 15
        }
    },
    {
        $set: {
            "qty": 15
        }
    }
);

image.png

  • db.collection.replaceOne()

使用替換文檔替換集合中與過濾器匹配的第一個匹配文檔。

// 把集合products中item為stamps 整個替換掉 
 db.products.replaceOne(
    { "item" : "stamps" },
    { "item" : "stampss", "Borough" : "Manhattan" }
 );

4.刪除操作

image.png

 // 刪除item為stampss的
 db.products.deleteOne( { "item" : "stampss" } );
 // 批量刪除qty小於15的
 db.products.deleteMany( { "qty" : {$lt: 15} } );

持續更新連接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM