อย่างที่เราทราบดีอยู่แล้วว่า MySQL เป็นฐานข้อมูลที่มีรูปแบบโครงสร้าง
หรือที่เรียกว่า schema ที่ชัดเจน ข้อมูลถูกจัดเก็บในฐานข้อมูลแยกเป็น table
ในแต่ละ table ก็จะประกอบด้วย Reconds (row) ซึ่งแต่ละ record ก็มีข้อมูล
ตามประเภทและชนิดของข้อมูลนั้นๆ อยู่เรียกว่า Fields (column)
นอกจากนั้นในแต่ละตาราง เราสามารถสร้างความสัมพันธ์ของข้อมูลระหว่างตาราง
เพิ่อเชื่อมโยงข้อมูลระหว่างกันได้ (Relation Database) ซึ่งเราเรียกฐานข้อมูลในลักษณะข้างต้น
นี้ว่า SQL ย่อมาจาก Structured Query Language
ส่วน MongoDB นั้นจะเป็นลักษณะ Document Database ข้อมูลถูกจัดเก็บแยกเป็น Collection
(ถ้าเทียบก็คือ table) แต่ละ collection ก็จะมี document (เทียบได้กับ row) แต่ละ document จะมี
field (เทียบได้กับ column) ซึ่งใน docoment หนึ่งๆ ไม่จำเป็นต้องมี field เหมือนกันก็ได้ เราเรียก
ฐานข้อมูลในลักษณะข้างต้นว่า NoSQL
อย่างไรก็ดี เพื่อความเข้าใจที่ถูกต้องควรหาข้อมูล และทำความเข้าใจเพิ่มเติม
การติดตั้ง MongoDB Server
ในการเชื่อมต่อกับฐานข้อมูล MongoDB ก็ต้องมี MongoDB Server โดยสามารถ
เลือกทำได้สองวิธ๊ คือ
1. ใช้งานผ่าน Cloud หรือบริการฟรี เช่น สมัครใช้งาน MongoDB Atlas
2. ติดตั้ง Server จำลองที่เครื่องของเรา แล้วรัน MongoDB Server Service
ทั้งกรณีวิธีแรก และวิธีที่สอง เราสามารถเข้าไปยังลิ้งค์ ด้านล่าง
ถ้าเลือกวิธีแรก ก็เลือกตรงแท็บ Cloud เลือกทำการสมัครสมาชิกฟรี แล้วเข้าใช้งาน
ในที่นี้จะแนะนำตัวอย่างวิธีที่ 2 ให้เลือกที่แท็บ Server
ทำการดาวน์โหลด และติดตั้งให้เรียบร้อย เลือกติดตั้งแบ complete โดยหลักๆ ก็จะกด Next ไปเรื่อยๆ จนจบขั้นตอน
หากมีการแจ้งใดๆ เพิ่มเติมที่อาจจะเกิดขึ้น ก็กด Ignore ข้ามไปจนติดตั้งสำเร็จ ตัวโปรแกรมที่เราได้มาเพิ่มคือตัวจัดการ
หรือโปรแกรมจัดการที่ชื่อ MongoDB Compass Community
ส่วนตัวโปรแกรม MongoDB Server Service จะอยู่ในโฟลเดอร์
C:\Program Files\MongoDB\Server\4.0\bin
ไฟล์ Application ที่เราจะต้องใช้งานคือไฟล์ mongod.exe เพื่อรัน Server Serivce และไฟล์ mongo.exe เพื่อ
ทำงานคำสั่งต่างๆ หรือก็คือใช้งาน MongoDB ผ่าน command line
และเพื่อที่เราจะสามารถใช้คำสั่ง "mongo" และ "mongod" ผ่าน command line ที่ใดก็ได้
ให้เราเข้าไปเพิ่ม Path ข้างต้นไปใน Environment Variable โดยคลิกขวาที่ปุ่ม Start เลือก Run
แล้วกรอกข้อความตามด้านล่าง แล้วกด Enter
rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
เข้าไปยังหน้า Environment Variable ไปส่วนของ System Path แล้วทำการเพิ่ม Path ข้างต้น
เมื่อทำตามขั้นตอนเรียบร้อยแล้ว เราสามารถเรียกใช้คำสั่ง mongo และ mongod ได้ โดยไม่ต้องเรียกใช้งาน
ผ่าน path ของโฟลเดอร์โปรแกรม กล่าวคือ เดิมเราต้องเรียกใช้ผ่าน command line ที่ path
C:\Program Files\MongoDB\Server\4.0\bin> mongod
เราก็สามารถเรียกใช้งานผ่าน
C:\projects\expressjs> mongod
ต่อไปให้เราสร้างโฟลเดอร์ "data" และ "db" ไว้ใน Drive C
C:. ├───data │ └───db
ตอนนี้เราพร้อมรัน MongoDB Server Service แล้ว โดยสามารถใช้คำสั่ง "mongod" ผ่าน command line โดยเราต้อง
เปิดหน้านี้ค้างไว้ เพื่อให้ Server ทำงาน เราสามารถใช้ VSCode เปิดอีกหน้าต่าง Terminal ทำงานนี้ได้
เมื่อ MongoDB Server ทำงาน เราสามารถใช้การเชื่อมต่อ จาก IP : 127.0.0.1 หรือ localhost
ผ่าน Port ที่กำหนดมาให้ ในที่นี้คือ 27017
รูปด้านล่างคือ MongoDB Server กำลังทำงานอยู่
หากต้องการปิด Server ก็ให้กด Ctrl+C
อย่างไรก็ตาม เพื่อไม่ให้ VSCode ทำงานหนักเกินไป ทั้งทำงานรัน MongoDB Server ค้างไว้ และรันทดสอบ Express
App เราควรรันคำสั่ง "mongod" ที่โปรแกรมจากภายนอกแทนเช่น command prompt
เราสามารถใช้คำสั่ง "mongo" เพื่อเข้าไปจัดการฐานข้อมูล MongoDB ผ่าน shell หรือ Command line ได้
อย่างเช่นใช้คำสั้ง "show dbs" จะแสดงฐานข้อมูลเริ่มต้นมาให้
ในที่นี้เราจะไม่จัดการผ่าน shell แต่จะใช้งานผ่านโปรแกรม MongoDB Compass Community เราก็กด Ctrl+C เพื่อ
ออกจาก mongo shell กลับมาหน้า โปรเจ็คของเรา
การใช้งาน MongoDB Compass
ให้เราเปิดโปรแกรมจัดการ MongoDB Compass ขึ้นมา อย่าลืมว่า เราต้องทำการรัน MongoDB Server Service ไว้ก่อน
โดยใช้คำสั่ง mongod ผ่าน commond prompt และให้ทำงานค้างไว้ก่อน ตามที่ได้อธิบายไปแล้วข้างต้น
ในหน้าต่างโปรแกรม ให้เราสร้างการเชื่อมต่อใหม่ "New connection" กำหนดค่าหลัก คร่าวๆ แค่ Hostname และ Port
จากนั้นกดปุ่ม Connect
หากไม่มีอะไรผิดพลาด สามารถเชื่อมต่อกับ MongoDB Server ได้ ก็จะแสดงรายการฐานข้อมูลเริ่มต้น
สิ่งที่เราต้องทำต่อ คือ เราจะสร้างฐานข้อมูลเพิ่มขึ้นมาใหม่ชื่อว่า "testdb" พร้อมกับสร้าง collection ชื่อ "tbl_users"
ตอนนี้ เราก็พร้อมไปทำการสร้าง RESTful API ในส่วนของ USERS API ในลักษณะคล้ายๆ กับ MySQL ได้แล้ว
จะเห็นว่าการใช้งาน MongoDB เราไม่จำเป็นต้องกำหนดรูปแบบของฟิลด์ข้อมูล หรือกำหนด column และประเภท
ของข้อมูลในขั้นตอนการสร้าง collection เหมือนกับในขั้นตอนของ MySQL หรือ SQL Database
ทำความเข้าใจย้อนหลังก่อนว่า tbl_users ของเรา จะมีเก็บข้อมูลเป็น id , name และ email ตัว id เดิมเราจะ
เป็นข้อมูลตัวเลขรัน แบบ auto increment และเป็น ตัว primary key
แต่ใน MongoDB จะไม่มี auto increment ให้ใช้งาน ตรงนี้เราต้องประยุกต์ นอกจากนั้นใน MongoDB จะมี "_id"
เป็น unique หรือเรียกว่า document’s primary key หากเราเพิ่มข้อมูลใดๆ เข้ามา โดยไม่ได้กำหนดค่าให้กับฟิลด์
"_id" ค่านี้จะถูกสร้างขึ้นมาอัตโนมัติ เราลองทดสอบเพิ่มข้อมูลในตัวโปรแกรมดู
จะเห็นว่า เมื่อเราจะลองทดสอบเพิ่มข้อมูลเข้าไปใน collention tbl_users ตัว "_id" จะเป็นค่า เริ่มต้นที่ตัวโปรแกรม
สร้างให้อัตโนมัติ เราสามารถกำหนดให้ค่าของ "_id" เป็นค่าตามที่เราต้องการก็ได้ เช่นเป็น 1 2 3 ..... หรือค่าที่ต้องการ
โดยค่าจะต้องไม่ซ้ำกัน หรือเราจะไม่สนในค่านี้ก็ได้ เช่น เราสร้างฟิลด์ใหม่เพิ่มเข้ามาใช้เป็น "id" โดยไม่ต้องสนใจ "_id" ก็ได้
ในที่นี้เราจะไม่สนใจฟิลด์ "_id" เราจะใช้ค่าฟิลด์ "id" ที่กำหนดเองแทน
ทดสอบเพิ่มข้อมูล
วิธีแก้ปัญหาสำหรับการกำหนด auto increment ให้กับฟิลด์ "id" ของเรา ในที่นี้จะใช้วิธีสร้างอีก collection หนึ่ง
ขึ้นมาสำหรับเก็บ lastid หรือค่า id ตัวสุดท้ายหลังจากเพิ่มข้อมูล ให้เราสร้าง "tbl_lastid" collection แล้วเพิ่มข้อมูล
ไปดังนี้
ใน tbl_lastid เราจะมีแค่ document เดียวหรือ row เดียว มี id เท่ากับ 1 และมีฟิลด์ user_id สำหรับเก็บ auto increment
ให้กับ tbl_users collection
การใช้งานคือ ทุกๆ ครั้งที่มีการเพิ่มข้อมูลใหม่เข้ามาใน tbl_users เราต้องไปอ่านค่าฟิลด์ "user_id" ใน tbl_lastid
ก่อนแล้วก็อัพเดทค่าเพิ่มเป็น +1 เข้าไป จากนั้นนำค่านั้นไปกำหนดในฟิลด์ "id" ใน tbl_users ดังนั้น เราก็จะได้ค่า id
ที่ไม่ซ้ำกันในแต่ละ user หลักการก็จะประมาณนี้ ส่วนวิธ๊การและแนวทางก็จะอธิบายในลำดับต่อไป ในตอนหน้า