# MongoDB 隨手筆記 由於Web應用程式和服務是NoSQL開發背後的主要驅動因素,因此,與RDBMS相比,各種類型的NoSQL資料庫都更具優勢。 ![](https://i.imgur.com/d4SOQAX.jpg) ## MongoDB terminalogies(相較於SQL): > * documents 等同於 rows > * collection 等同於 table > * field 等同於 column ## 安裝 > 1. 從mongodb website下載 > 2. docker image ## 從docker image開始,裡面有2個容器 > 1. MongoDB > 2. MongoExpress (WEB GUI) docker-compose.yaml: version: "3.8" services: mongodb: image: mongo container_name: mongodb ports: - 27017:27017 volumes: - data:/data environment: - MONGO_INITDB_ROOT_USERNAME=rootuser - MONGO_INITDB_ROOT_PASSWORD=rootpass mongo-express: image: mongo-express container_name: mongo-express restart: always ports: - 8081:8081 environment: - ME_CONFIG_MONGODB_ADMINUSERNAME=rootuser - ME_CONFIG_MONGODB_ADMINPASSWORD=rootpass - ME_CONFIG_MONGODB_SERVER=mongodb volumes: data: {} networks: default: name: mongodb_network ## Docker compose 指令: docker-compose.yaml 為預設檔 docker-compose -f docker-compose.yaml up //由docker-compose 1個指令來帶起容器,指定特定的yaml檔 docker compose -f docker-compose.yaml up //由docker和compose 2個指令來帶起容器,指定特定的yaml檔 docker compose up // 讀預預設yaml檔來啟動容器 docker compose down // 關閉並刪除容器、volume等內容,外部volume的不會刪除 docker compose start // 啟動容器 docker compose stop // 關閉容器 docker compose up -d // 啟動容器並在背景執行 -d 為 detach mode ## 連接到mongoDB > 1. 用GUI CLIENT(MongoExpress, DataGrip, MongoCompass) > 2. Mongo Shell > --> mongo mongodb://localhost:27017 -u username -p userpassword #### 在 mongo shell當中: db.help(); //查詢可用指令 use database_name; //使用或切換資料庫 show dbs; //顯示有哪些資料庫 db.getName(); //返回當前資料庫名稱 db.createCollection("person"); //建立名為 person 的collection db.dropDatabase(); //刪除當前資料庫 db.person.stats(); //查看table的統計狀態 db.person.drop(); //刪除collection show collections //查詢資料庫的collections ## MongoDB 的 collection field 格式 Document儲存格式為BSON,以JSON格式來描述,資料如下: ![](https://i.imgur.com/nt83clF.jpg) ## MongoDb - CRUD db.collection.insert(JSON) //插入1筆 db.collection.insertMany([JSON,....]) //搜入很多筆 db.collection.find(); //回傳查詢結果 db.collection.find().pretty(); //回傳查詢結果並讓它變『好看』一點 db.collection.find().pretty().count(); //回傳筆數 -> find{criterias, projections) //條件式查詢,投射出指定欄位 db.collection.find({firstName: 'Cally'}, {firstName:1, lastName:1}) -> projections 1 = 顯示(正向表列), 0 = 不顯示(負向表列) db.collection.update({criterias:value},{command{fields:value, ...}}) //更新1筆 Commands: -> $set 更新欄位值 -> $unset 是移除的意思,移除某一個欄位 -> $inc 增加指定數量 -> $pull 陣列某個元素 -> $push 加入某個元素到陣列 db.collection.deleteOne({}) //沒有給予criteria,刪除1筆 db.collection.deleteMany({gender: "M"}) //刪除多筆資料,當性別為M時 參考資料: https://docs.mongodb.com/manual/crud/ https://www.youtube.com/watch?v=Www6cTUymCY ###### tags: `NoSQL` `MongoDB` `Docker` `學習筆記`