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

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

MongoDB相對于RDBMS的優(yōu)勢

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

RDBMS:關系數(shù)據(jù)庫管理系統(tǒng)

為什么要使用MongoDB

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

在哪里使用MongoDB

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

docker-compose 快速啟動 MongoDB

docker-compose.yml

version: '3'
    services:
    mongodb:
      image: mongo:4.2.6 # 鏡像:版本
      container_name: mongo_db
      environment:
        - MONGO_INITDB_DATABASE=默認的數(shù)據(jù)庫
        - 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']
});

然后執(zhí)行命令

docker-compose up -d

Navicat Premium連接

image.png
image.png

填入上述 docker-compose.yml 對應的參數(shù)
測試連接,測試成功


image.png
image.png

如果你的不顯示,去

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

重啟navicat就可以了

image.png

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

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

增刪改查

1.創(chuàng)建操作

  • db.collection.insertOne()
  • db.collection.insertMany()
image.png
image.png
// 插入集合名稱為products的集合并插入數(shù)據(jù) (不存在集合會新建)
db.products.insertOne({
    item: "card",
    qty: 15
});

// 批量插入數(shù)據(jù)
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
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的統(tǒng)統(tǒng)修改為15
db.products.updateMany(
    {
        qty: {
            $gt: 15
        }
    },
    {
        $set: {
            "qty": 15
        }
    }
);
image.png
image.png
  • db.collection.replaceOne()

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

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

4.刪除操作

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

持續(xù)更新連接

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容