สอนทำเว็บไซต์ด้วย Node.js, Express และ MongoDB ตอนที่ 6 - เริ่มต้นกับ MongoDB
สวัสดีครับ มาต่อกันที่ตอนที่ 6 กันนะครับ สำหรับตอนนี้จะเป็นเรื่องเกี่ยวกับ MongoDB แล้วครับ โดยวันนี้จะเป็นเกี่ยวกับ MongoDB และวิธีการใช้งาน MongoDB เบื้องต้น ผ่าน Shell และ GUI นะครับ ยังไม่ได้ลงไปถึงการต่อ หรือการเขียนระหว่าง Nodejs และ MongoDB
เนื้อหาบทเรียน
- ตอนที่ 1 - NodeJS คืออะไร + ทำการติดตั้ง Node.js และ Node.js เบื้องต้น
- ตอนที่ 2 - ทบทวนพื้นฐาน JavaScript และ Modern JavaScript ES6, ES7+
- ตอนที่ 3 - ว่าด้วยพื้นฐาน Node.js / Callback / Sync และ Async
- ตอนที่ 4 - เริ่มต้นทำเว็บด้วย Node.js และ Express.js
- ตอนที่ 5 - ลองหัดใช้ Template Engine ชื่อ Pug
- ตอนที่ 6 - เริ่มต้นกับ MongoDB (บทความนี้)
- ตอนที่ 7 - ทำ Backend API ด้วย Node.js และ MongoDB กันดีกว่า
- ตอนที่ 8 - Express Generator / Middleware
- ตอนที่ 9 - ทำระบบ Login ด้วย Passport.js
- ตอนที่ 10 - การ Hosting และ Deploy Production
ก่อนหน้านี้ จริงๆ ผมเคยเขียนบทความเกี่ยวกับ MongoDB ไว้เหมือนกัน สามารถอ่านได้จากด้านล่างก็ได้ครับ โดยในบทความนี้ก็พยายามเขียนจากบทความเดิม แต่มีแก้ไข และอัพเดทให้มันปัจจุบันนะครับ
MongoDB คืออะไร?
MongoDB เป็น Database แบบ NoSQL คือไม่ใช่ว่า ไม่ใช้ SQL นะครับ แต่หมายถึง non SQL หรือ non relational ครับ คือมันอาจจะมีการเก็บ หรือการทำ relation ที่แตกต่างจากพวก Relation Database และจะถูกเก็บข้อมูลเป็น BSON ซึ่งมันก็คล้ายๆกับ JSON เลยครับ โดยเก็บเป็น Key และ Value นอกจากนี้มันก็จะมีตัว _id
ที่เป็น auto generate ให้เป็น unique key ครับ
ซึ่งมันก็เป็นหนึ่งในจุดเด่นของ MongoDB เช่นกัน นอกจากนี้ก็มี เรื่อง Schemaless คือการไม่ต้องกำหนดโครงสร้างใดๆให้มันเหมือน SQL ปกติทั่วไป เช่น collection User (หรือ Table User) มีเก็บแค่ name ต่อมาเราสามารถเพิ่มการเก็บ position เข้ามาได้เลย แบบนี้ แต่ถ้าเป็น SQL เราก็ต้องมาปรับ schema ใหม่ (จริงๆเรื่อง schemaless มันก็เป็นได้ทั้งข้อดีข้อเสียเนอะ อยู่ที่การใช้งานของเรา และการออกแบบครับ)
ตัวอย่างเมื่อเปรียบเทียบระหว่าง SQL เช่น MySQL กับ NoSQL อย่าง MongoDB
MySQL | MongoDB |
---|---|
Table | Collections |
Row | Document |
Column | Field |
Join | Embedded documents, reference |
เพื่อนๆ สามารถอ่าน MongoDB Guides ได้จาก Official ของ MongoDB ได้เช่นกันครับ
ติดตั้ง MongODB
สำหรับการติดตั้ง MongoDB บน Mac OS นั้นง่ายๆมากครับ เราสามารถติดตั้งผ่าน Homebrew ได้เลยครับ
ส่วน Windows สามารถ Download ได้จาก Link นี้ครับ แล้วเลือก Version และ OS ที่เราต้องการครับ (แนะนำเป็นเวอร์ชั่น 4.2.3 ซึ่งเป็นเวอร์ชั่นปัจจุบัน)
ก็ทำการติดตั้ง ผ่าน Installaition Wizard ได้เลยครับ เมื่อติดตั้งเสร็จ เราสามารถ Start MongoDB ได้ด้วยคำสั่ง
หากใครไม่สามารถ Start ได้ ให้สร้างโฟลเดอร์ /data/db
ขึ้นมาก่อนครับ หรือลองดูบทความด้านล่างประกอบ
คำสั่ง MongoDB เบื้องต้น
เมื่อเรา Start Server ของ MongoDB ได้แล้ว เราสามารถใช้คำสั่ง หรือ shell เข้าไปใน MongoDB Server ได้ด้วยการเปิด Terminal หรือ Power Shell จากนั้นพิมพ์
จะได้เจอ Message รวมถึง Warning ประมาณนี้
การดูรายชื่อฐานข้อมูลทั้งหมดใช้คำสั่ง
จะแสดงรายชื่อฐานข้อมูลในเครื่อง ประมาณนี้
เราสามารถเลือกฐานข้อมูลที่ต้องการจากรายชื่อได้ โดยใช้ use <db_name>
เช่น
เราสามารถดู Collections ทั้งหมด ใน table ได้ด้วยคำสั่ง
Insert MongoDB
ตัว MongoDB จะเก็บข้อมูล (Document) เป็น BSON เก็บไว้ใน Collection เช่น users ซึ่งการ Insert หากว่า เราไม่ได้ระบุ _id
ตัว MongoDB จะทำการใส่ให้อัตโนมัติ โดยเป็นค่าแบบ ObjectId
เช่น การใช้ insertOne()
Syntax มันคือ db.COLLECTION_NAME.command
เช่น
นอกจากนี้เรายัง Insert ที่ละหลายๆค่า หรือ insert ด้วย array ได้เช่นกัน ด้วยคำสั่ง insertMany()
เช่น
Query
การค้นหา หรือ Query จะเป็น syntax db.COLLECTION_NAME.find()
ครับ โดยเราสามารถใส่ condition เป็น Object ได้
คือการ Query collection users โดยไม่มี criteria นั่นเอง ก็จะได้ users ทั้งหมด หากเราต้องการ Query แบบ กำหนดเงื่อนไข ก็แค่ระบุเป็น key value เช่น query name ที่มีค่า chai ก็จะเป็น
เราสามารถใช้
.pretty()
ต่อท้ายfind()
เพื่อให้มัน format ให้สวยได้ (เฉพาะใน Mongo Shell) เช่นdb.users.find().pretty();
Logical Condition
นอกจากนี้ก็มีการ Query ด้วยการใช้ Logical Condition เช่น AND
, OR
หรือพวก มากกว่า น้อยกว่าครับ เช่น หากเราต้องการ Query users ที่ชื่อ admin และมี email = admin@example เราก็จะทำแบบนี้
การใช้ OR
หรือ น้อยกว่าก็เช่นกัน เช่น หา users ที่อายุน้อยกว่า 20
Update
การ Update เราสามารถเลือก Update ค่าเดียว หรือทีละหลายๆค่าก็ได้ โดยมี criteria และข้อมูลที่เราต้องการจะอัพเดท โดยใช้ Operator $set
มาช่วย ตัวอย่างเช่น ทำการอัพเดท users ที่ชื่อ admin โดยเปลี่ยนเป็น admin2 และ status เป็น deactive
ส่วนการ Update หลายๆค่า ก็ทำเหมือนกันเลย เพียงแค่เปลี่ยนจาก updateOne
เป็น updateMany
เช่น
สิ่งที่ updateOne
ทำคือ หาก condition ตรงตามที่เรากำหนด มันจะอัพเดท ค่าแรกที่เจอ ในขณะที่ updateMany
จะอัพเดททุกค่าที่เข้าเงื่อนไข นั่นเอง
Delete
การ Delete หรือลบข้อมูล เราจะใช้ deleteOne
และ deleteMmany
คล้ายๆกับ Update ครับ คือกำหนด condition / criteria ที่เราต้องการลบ หากเป็น deleteOne
มันเจอค่าแรก มันก็จะลบแค่ค่าแรกที่เจอครับ เช่น
หรือ ลบที่ละหลายๆค่า
นอกเหนือจากที่กล่าวมาเบื้องต้น เพื่อนๆยังสามารถไปดูพวก Command คำสั่งต่างๆ ของ MongoDB เพิ่มเติมได้ที่ Official Document ของมันได้เลยครับ MongoDB - Collection Methods
MongoDB GUI
หากใครสงสัยว่า เราจะใช้ GUI ได้มั้ย ไม่อยากใช้ shell คำตอบคือได้ครับ และ GUI ที่เป็นที่นิยมสำหรับ MongoDB ก็คือ Robo 3T หรือชื่อเก่าคือ Robomongo นั่นเอง
สามารถดาวน์โหลดได้เลยครับ จะเลือกแบบ Studio หรือแบบธรรมดาก็ได้เช่นกัน
โดยตัว Studio มันจะมีขนาดใหญ่กว่า และมันก็มี features อื่นๆ เช่น
- สามารถ Migrate database จาก sql ได้
- auto complete เวลาเราพิมพ์ command
- ลากวางได้ หรือใช้คำสั่ง sql เพื่อ query mongodb ก็ได้ (มันจะแปลงให้)
แต่สำหรับใครชอบแบบเรียบๆ ง่ายๆ ก็เลือกแบบธรรมดาก็ได้ครับ
เราสามารถเลือก connect database และเลือก collection ได้แบบนี้ครับ สามารถ click หรือใช้ query command ก็ได้เช่น ก็คล้ายๆ พวก sql Benchmark / Toad / Data Grip / TablePlus หรือ Tool อื่นๆเลยครับ
ตอนนี้เราก็สามารถเรียนรู้ MongoDB เบื้องต้น และคำสั่งเบื้องต้นได้แล้วนะครับ ตอนต่อไป เราจะทำการเชื่อมต่อ หรือการ Query / Insert ข้อมูล โดยผ่าน Node.js (Express.js) กันครับ ติดตามอ่านได้เลยครับ
หากใครติดปัญหา หรือไม่เข้าใจตรงไหน สามารถสอบถามได้ครับ หรือหากใครเจอข้อผิดพลาด สามารถแนะนำได้เช่นกันครับ
ขอบคุณครับ
❤️ Happy Coding
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust