MongoDB

先娶国王后取经發表於2024-12-10

應用場景

評論區

TODO

docker 部署 MongoDB

version: '3'
services:
  mongo:
    image: mongo:6.0.4
    container_name: mongoDB
    restart: always
    ports:
      - 27017:27017
    volumes:
      - /data/mongodb/data:/data/db
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: root
  mongo-express: # web 管理介面 初始密碼:admin:pass
    image: mongo-express
    container_name: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: root
      ME_CONFIG_MONGODB_URL: mongodb://root:root@mongo:27017/

基本操作

// 查詢所有資料庫(僅限於磁碟上的,不包括記憶體中的)
show databases

// 檢視當前正在使用的資料庫
db

// 刪除資料庫:該命令需要先使用 use 資料庫名稱 命令切換到指定的資料庫
db.dropDatabase()

// 建立集合:可理解為MySQL中的表
db.createCollection('集合名')

// 刪除集合
db.集合名.drop()

建立資料庫

// 如果資料庫不存在則自動建立, 但此時只會在記憶體中建立資料庫,只有當資料庫中有集合中才會從記憶體落盤到硬碟中
use 資料庫名稱

CURD

// 單條記錄插入, 插入的資料如果沒有指定 _id,則系統會為其自動生成主鍵值。
db.article.insert({
    "article_id": "100001",
    "content": "寫的什麼鬼?",
    "user_id": "1001",
    "nickname": "許大仙",
    "like_num": NumberInt(10), # MongoDB 中的數字,預設情況下是 double 型別;如果需要儲存整數,需要使用 NumberInt(整型數字) 函式。
    "create_time": new Date(),
     state: null # 如果某個欄位沒有值,可以賦值為 null,或者不寫該欄位
})


// 多條記錄插入
db.article.insertMany([
    {
        "article_id": "100002",
        "content": "2寫的什麼鬼?",
        "user_id": "1002",
        "nickname": "許大仙2",
        "like_num": NumberInt(20),
        "create_time": new Date(),
        state: null
    },
    {
        "article_id": "100003",
        "content": "3寫的什麼鬼?",
        "user_id": "1003",
        "nickname": "許大仙3",
        "like_num": NumberInt(20),
        "create_time": new Date(),
        state: null
    }
])


// 查詢user_id 欄位為1001 的資料
db.article.find({"user_id":"1001"})


// 投影:只展示部分列
    // 只顯示 user_id 和 nickname: 1 表示顯示,0 表示隱藏
db.article.find({},{"user_id":1,"nickname":1})

// 將 user_id 為 1001 的文件的 like_num 設定為 1000 (只修改一個文件,即一條記錄)
db.article.update({user_id:1001},{$set:{like_num:1000}})
// 批次修改
db.article.update({user_id:'1001' }, {$set:{nickname:'許大仙人'}}, {multi:true})


// 刪除文件
db.article.deleteMany({user_id:'1001'})

索引

空間換時間

// 建立索引:1表示升序,-1 表示降序
db.agg.createIndex({name:1,age:-1})

// 檢視索引
db.agg.getIndexes()


// 刪除索引
db.agg.dropIndex({name:1,age:-1})

相關文章