--- tags: Node.js 直播班 - 2022 春季班 --- # 第一週 mongoDB 資料庫教學 ## 開課提醒 1. 錄影 2. 點名,[報到]() Code:`bWGyPcLEBgdA` 3. [Adobe XD 設計稿](https://xd.adobe.com/view/c0763dbe-fc15-42e8-be0b-8956ed03e675-9525/grid) 4. 將[書籤]()加入最愛 5. 覆述本課宗旨 6. **學習進度安排([錄影檔]()、[開學典禮]())** 8. [主線任務]()獎品(達四關),[每日任務]()安排 10. 6/11~6/12 小組專題發表會,會找廠商。4月底也會有線下,下週公布。 11. 是否要報名[小組]()? ## 宗旨 秉持六角學院熱於分享的精神,秉持熱心、耐心、同理心為根基,不僅帶領學員掌握前端技術,並提供以學員職涯發展為中心的教學環境。 ## 願景 **成為全世界最優質的 Node.js 教學教育單位** ## 義務與責任 1. 六角團隊有責任帶領每位學員,掌握 Node.js 後端技能 2. 六角團隊有義務帶領整體班級,凝聚班級向心力,藉由同濟效應提升學習意願 3. 六角團隊必須考量每位學員的背景,由淺入深地規劃課程內容 4. 六角團隊需為學員設計階段性目標,讓學員能一步步完成任務,進以掌握本門課程技能 ## mongoDB 資源 1. [mongoDB 簡報](https://whimsical.com/mongodb-FCuHtC9DW1SHqRWBKsJKp1) 2. [Adobe XD 設計稿](https://xd.adobe.com/view/c0763dbe-fc15-42e8-be0b-8956ed03e675-9525/) ## 前置環境安裝 * [mongo 安裝](https://www.mongodb.com/try/download/community) * [compass 安裝](https://www.mongodb.com/try/download/compass) ## 以旅館訂房網來說明([簡報](https://whimsical.com/mongoose-YKTKL5aF4pHQbkemgQTMZH)) * 透過 excel 與學員來講解 mongoDB * rooms、users ## 如何開啟一個 mongo 資料庫 1. 新增 data 與 log 資料夾 2. 指行指令:`mongod --dbpath "data 資料夾"` 3. 若要有 log: `mongod --dbpath "DB資料夾路徑" --logpath "LOG資料夾路徑/mongo.log"` ``` mongo 與 mongod 指令差異 1. mongod:server 端開啟伺服器應用 2. mongo: 客戶端,直連造訪您開啟的 server 應用 MAC 可開設活動監視器觀看 ``` ## 常見指令 ## 資料庫顯示 - 顯示資料庫:show dbs - 切換資料庫:use `資料庫名稱` - 觀看指令資料庫裡面的集合:show collections ### 新增一筆資料 insertOne ```jsx db.rooms.insertOne( {name:"單人房",price:1000,rating:4.5} ) ``` ### 新增多筆資料 insertMany ```jsx db.rooms.insertMany( [ { "rating": 4.3, "price": 1500, "name": "豪華單人房" }, { "rating": 4.8, "price": 2000, "name": "雙人房" } ] ) ``` ## 中場休息 * 訂出小組討論時間 * 分享彼此的 JS 程度 * 週六、日上午或下午(規劃分工) * 週一~五非同步 GitHub Flow 開發 * 或是一組裡面還可以拆成 2 小組 * 還沒看預習的,可以先練習發 GitHub PR 加註解 > 洧杰 NOTE:刪除既有 compass 資料 ### 尋找集合裡面的資料 db.collections.find() ``` ## 一般搜尋 - db.集合名稱(collections name).find() - 尋找對應屬性:db.collections.find({屬性名稱:屬性值}) - 模糊搜尋:db.rooms.find({"name":/雙/}) - 數值區間:db.collections.find({屬性名稱:{$gt:400}}) - 複合條件:db.collections.find({屬性名稱:{$gt:400},rating:{$gte:4.4}}) ## 常用語法 - project 保護欄位:db.rooms.find({"name":/雙/},{"_id":0}) - 搜尋陣列裡面的值:db.rooms.find({"payment":{$in:["信用卡"]}}) ``` | $eq | 等於 | | --- | --- | | $ne | 不等於 | | $gt | 大於 | | $lt | 小於 | | $gte | 大於等於 | | $lte | 小於等於 | | $in | 存在某個值 | | $nin | 不存在某個值 | 邏輯運算子:or 或 and - `$or:find({$or:[{},{}]})` ```=javascript db.rooms.find( { $and: [ {price:{$lte:1500}}, {rating:{$gte:4.5}} ] } ) ``` ## 修改 updateOne `replaceOne()`,只能替換整個文件,`updateOne()`則允許更新欄位。 ```jsx db.rooms.updateOne( {"_id":ObjectId("621edf99a20aa7506a116f9a")} ,{$set:{name:"修改雙人房"}}) ``` ### 修改多個值 [updateMany](https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/)(filter 篩選 >$set 更換設定) ```jsx db.rooms.updateMany( {rating:{$gt:4.5}}, {$set:{price:300}} ) ``` ### 替換整個文檔:replaceOne、replaceMany **db.collection.replaceOne(filter, replacement, options)** ```jsx db.rooms.replaceOne( {"_id":ObjectId("621edf99a20aa7506a116f9a")}, {name:"yes~"}) ``` ### 刪除多個文件:deleteMany(filter) ```jsx db.rooms.deleteMany( { rating:{$gte:4.3} }) ``` ## driver 介紹 1. [mongoDB 官方文件](https://docs.mongodb.com/manual/core/document/) 2. [.NET Core](https://docs.microsoft.com/zh-tw/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-6.0&tabs=visual-studio) 3. [Node.js NPM Mongoose](https://mongoosejs.com/docs/api/model.html#model_Model.findOne) ## 資料集 ``` =JavaScript [ { "rating": 4.5, "price": 1000, "name": "標準單人房", "payment":["信用卡","ATM"] }, { "rating": 4.3, "price": 1500, "name": "豪華單人房", "payment":["信用卡","ATM"] }, { "rating": 4.8, "price": 2000, "name": "標準雙人房", "payment":["信用卡","ATM"] }, { "rating": 4.7, "price": 2500, "name": "豪華雙人房", "payment":["ATM"] }, { "rating": 4.0, "price": 3000, "name": "標準四人房", "payment":["現金"] }, { "rating": 3.5, "price": 10000, "name": "總統套房", "payment":["現金"] } ] ``` ## 主線、週末任務 ### 主線任務 * [第一週主線任務連結]() * [複製用的 HackMD]() ### 週末任務一:極速切版(需開源) 1. 切此份[設計稿](https://xd.adobe.com/view/c0763dbe-fc15-42e8-be0b-8956ed03e675-9525/grid),需選擇以下版本,每位版本限一位,4/10 週日前 23:59:59 前切完 HTML+CSS 全部版型含 RWD 2. 經審核沒問題,並有依照指定項目批改後,贈送 [express](https://www.books.com.tw/products/0010861469) 書籍。請做完後到大廳 tag 洧杰,提交 GitHub Repo、GitHub pages 分享已做完。 * 版本一:純手寫 CSS 版本 * 版本二:原生 SCSS 版本 [馨云](https://github.com/hsin-yunn/hex_school_node_final_scss)、[灰塵貓](https://github.com/qoo584769/node_final_design) * 版本三:Bootstrap5+SCSS 版本 [wendy](https://github.com/Wendy03/metawall/tree/master/stylesheets) * 版本四:TailwindCSS 版[承蔚](https://github.com/linche0859/Node.js-Final)、[士桓](https://github.com/huan5678/nodeJS-Final-Design-layout)、[Chao Next.js](https://github.com/oneraner/metawall) ### 週末任務二:mongoose todolist kata 壓在 30 min 內,前三名送書 1. 觀看「什麼是 mongoose?不是已經學 mongoDB shell ?」此章節影片,將 todolist kata 任務內容,再加上 Mongoose 連接 MongoDB 雲端資料庫,錄製壓在 30 min 內 2. 請錄製 YouTube 影片,錄製時間需在 4/8 22:00~4/10 23:59:59 3. 請做完後到大廳 tag 洧杰,提交 * GitHub Repo、裡頭需附上 連接 mongoDB Alsta 的 POSTMAN * YouTube 連結 ### Vic Github : https://github.com/Hsuan777/todolist-mongoose-kata2 Youtube : https://www.youtube.com/watch?v=AnHn1o1mRAw ## Kimn Github : https://github.com/kimnTai/todoList-kata Youtube : https://youtu.be/9hbNmCNOtzc