PHP Ionic Angular HTML5 AJAX Javascript CSS MySQL jQuery Forum


เตรียมพร้อมก่อนใช้งาน MongoDB ร่วมกับ Express

04 May 2019 By Ninenik Narkdee
mongodb expressjs restful api nodejs

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ mongodb expressjs restful api nodejs



    อย่างที่เราทราบดีอยู่แล้วว่า 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 
    
    ทั้งกรณีวิธีแรก และวิธีที่สอง เราสามารถเข้าไปยังลิ้งค์ ด้านล่าง
        https://www.mongodb.com/download-center
 
    ถ้าเลือกวิธีแรก ก็เลือกตรงแท็บ 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 หลักการก็จะประมาณนี้ ส่วนวิธ๊การและแนวทางก็จะอธิบายในลำดับต่อไป ในตอนหน้า


อย่าลืมกด Like กด Share เป็นกำลังใจ ในการสร้างบทความใหม่ๆ น่ะครับ



อ่านต่อที่บทความ









เนื้อหาที่เกี่ยวข้อง



Tags:: mongodb nodejs restful api expressjs







URL สำหรับอ้างอิง