天天看點

MongoDB快速入門指南與docker-compose快體驗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           

Navicat Premium連接配接

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

填入上述 docker-compose.yml  對應的參數

測試連接配接,測試成功

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

如果你的不顯示,去

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

重新開機navicat就可以了

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

打開一個集合右下角可以檢視

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

增删改查

1.建立操作

  • db.collection.insertOne()
  • db.collection.insertMany()
MongoDB快速入門指南與docker-compose快體驗MongoDB快速入門指南與docker-compose快體驗
// 插入集合名稱為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()
MongoDB快速入門指南與docker-compose快體驗MongoDB快速入門指南與docker-compose快體驗
db.products.find({ qty: 15 }).limit(1)           

3.更新操作

  • db.collection.updateOne()

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

查找與過濾器比對的第一個文檔,并應用指定的更新修改。
MongoDB快速入門指南與docker-compose快體驗MongoDB快速入門指南與docker-compose快體驗
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()
MongoDB快速入門指南與docker-compose快體驗MongoDB快速入門指南與docker-compose快體驗
// 把qty大于15的統統修改為15
db.products.updateMany(
    {
        qty: {
            $gt: 15
        }
    },
    {
        $set: {
            "qty": 15
        }
    }
);           
MongoDB快速入門指南與docker-compose快體驗MongoDB快速入門指南與docker-compose快體驗
  • db.collection.replaceOne()
使用替換文檔替換集合中與過濾器比對的第一個比對文檔。
// 把集合products中item為stamps 整個替換掉 
 db.products.replaceOne(
    { "item" : "stamps" },
    { "item" : "stampss", "Borough" : "Manhattan" }
 );           

4.删除操作

MongoDB快速入門指南與docker-compose快體驗MongoDB快速入門指南與docker-compose快體驗
// 删除item為stampss的
 db.products.deleteOne( { "item" : "stampss" } );
 // 批量删除qty小于15的
 db.products.deleteMany( { "qty" : {$lt: 15} } );           

持續更新連接配接