MongoDB


MongoDB คืออะไร ?

          MongoDB (มองโกดีบี) คือฐานข้อมูลชนิดหนึ่งนี่แหละครับ ผู้อ่านอาจจะเคยรู้จักฐานข้อมูลชนิดอื่นมาก่อนเช่น MySQL หรือ ProgreSQL ซึ่งเป็นฐานข้อมูลจำพวก Relational Database (ฐานข้อมูลเชิงสัมพันธ์)

          ฐานข้อมูลพวกนี้ก็จะมีการเก็บข้อมูลเป็นตาราง (Table) โดยในแต่ละตารางก็จะมีหลายคอลัมถ์ (Column) และหลายแถว (Row) และระหว่างตารางเองก็จะมีการเชื่อมสัมพันธ์กันโดยการกำหนดกุญแจความสัมพันธ์ด้วย Primary Key, Foreign Key ซึ่งนั่นก็เป็นเอกลักษณ์ของ Relational Database


          แต่ทว่า MongoDB นั้นต่างออกไปครับ MongoDB คือฐานข้อมูลที่ไม่มีความสัมพันธ์ (No Sql Database) หรือเรียกอีกอย่างว่า Document Database


          โดย MongoDB นั้นจะเก็บข้อมูลในรูปแบบของแฟ้มเอกสาร (Document) โดยแต่ละแฟ้มข้อมูลนั้นจะเป็นอิสระจากกันโดยสิ้นเชิง แฟ้มข้อมูลหลายๆแฟ้มรวมกันถูกบรรจุอยู่ในคอลเลกชัน (Collection) ข้อมูลในแต่ละแฟ้มนั้นจะถูกจัดเก็บในรูปแบบของ JSON (JavaScript Object Notation) ซึ่งมีความคล้ายคลึงกันกับ Associate Array ใน PHP หรือ Directory Object ใน Python ครับ


          เผื่อบางท่านนึกภาพ Format รูปแบบ JSON ไม่ออก มีตัวอย่างไห้ดูจากเว็บไซต์ https://jsonplaceholder.typicode.com/ หรือสามารถกดที่ปุ่มด้านล่างเพื่อแสดงตัวอย่าง



          และ MongoDB จะไม่มีการกำหนดข้อผูกมัดตายตัวตั้งแต่เริ่มเหมือนกับ MySQL ที่เราต้องมากำหนด Schema ให้กับฐานข้อมูลก่อนเช่น ถ้าหากเราอยากสร้างฐานข้อมูลนึงขึ้นมา เราก็ต้องมากำหนดก่อนว่าฐานข้อมูลเราต้องมีตารางอะไรบ้าง และในตารางนั้นต้องมีแอททริบิวอะไรบ้าง ฟิลด์ข้อมูลต้องเป็นตัวเลข ว/ด/ป ทศนิยม ฯลฯ

          เปรียบเทียบคำเรียกระหว่าง MongoDB และ MySQL
MySQLMongoDB
TableCollection
RowDocument
ColumnField
JoinsEmbedded documents, linking



MongoDB มีดีอย่างไร ?

          Flexibility ข้อดีที่เห็นได้เด่นชัดที่สุดของ MongoDB นั่นก็คือความยืดหยุ่นของข้อมูลครับ เพราะไม่จำเป็นต้องกำหนดกฏการผูกมัดข้อมูล ฟิลด์ (Field) ของข้อมูลในแต่ละแฟ้มจึงสามารถที่จะแตกต่างกันได้อย่างสิ้นเชิงครับ ยกตัวอย่างเช่น

          แฟ้มข้อมูลของ นาย ดำ เก็บข้อมูล
          - เลขทะเบียนบ้าน
          - เลขบัตรประชาชน
          - อีเมล

           ส่วนแฟ้มข้อมูลของ นาย แดง เก็บข้อมูล
          - ประวัติการศึกษา
          - ตำแหน่งงานปัจจุบัน

เป็นต้น



          Performance ประสิทธิภาพในที่นี่หมายถึงความเร็วครับ ด้วยการที่ MongoDB เป็นฐานข้อมูลแบบไร้ความสัมพันธ์ ความเร็วในการคิวรี่ (Query) ข้อมูลจึงเร็วกว่า ฐานข้อมูลเชิงสัมพันธ์อย่าง MySQL เป็นอย่างมาก




ดาวน์โหลด และติดตั้ง MongoDB


          สำหรับการดาวน์โหลดนะครับให้เข้าไปที่ https://www.mongodb.com/download-center#community

รูปภาพจาก https://www.mongodb.com/download-center#community

          - เลือกระบบปฏิบัติการ (Windows, Linux, OSX ......)
          - เลือกเวอร์ชั่นของระบบปฏิบัติการ (32-bit, 64-bit ......)
          - กดปุ่มดาวน์โหลด
          - เมื่อดาวโหลดเสร็จแล้วก็ติดตั้งได้เลย
          - มีสองแบบให้เลือกติดตั้งคือแบบ Complete (สำเร็จรูป) หรือแบบ Custom (ปรับแต่ง) ถ้าไม่อยากปรับอะไรมากก็เลือกอันแรกได้เลย โปรแกรมจะถูกติดตั้งที่ C:\Program Files\MongoDB\Server\3.4\ แต่ถ้าเลือกแบบปรับแต่งจะสามารถเลือก path ติดตั้งเอาไว้ที่ไหนก็ได้ เช่น C:\mongodb D:\database เป็นต้น
          - Next > Install

          หลังจากติดตั้งแล้วเข้าไปที่ C:\Program Files\MongoDB\Server\3.4\bin
          จะเห็นได้ว่ามีไฟล์มากมายอยู่ในโฟลเดอร์ แต่ที่เราสนใจจริงๆ คือสองตัวนี้ครับ
          - mongo.exe มีไว้สำหรับรัน Mongo Shell บนหน้าต่าง Command Line สีดำๆ ไว้สำหรับพิมพ์คำสั่งต่างๆของ MongoDB ซึ่งค่อนข้างใช้งานยากเพราะไม่มี GUI ช่วยเลย ต้องพิมพ์คำสั่งเองทุกตัวอักษร
          - mongod.exe มีไว้สำหรับรัน Server บน Local Host ของเรา ต้องรันทุกครั้งก่อนใช้งาน MongoDB (ไม่จำเป็นต้องรัน หากกำหนดค่า MongoDB ให้เป็น Window Service)

          ไฟล์ข้อมูล Database จะอยู่ที่ C:\data\db (ตามไดรฟ์ที่เราลง MongoDB)

          สร้าง Shortcut ของ mongod.exe ไว้ที่หน้า Desktop ได้เลยครับเพื่อความสะดวกในการเรียกใช้งาน คราวนี้เราจะมาติดตั้ง RoboMongo (Robo 3T) กันครับ



ดาวน์โหลด และติดตั้ง RoboMongo

          RoboMongo (Robo 3T) คืออะไร อธิบายง่ายๆก็คือ GUI ของ MongoDB นั่นแหละครับ เข้าไปดาวน์โหลดเครื่องมือนี้ได้ที่ https://robomongo.org/download
ไไไไไไไไไ
รูปภาพจาก https://robomongo.org/static/screens-transparent-6e2a44fd.png

          หลังจากติดตั้ง RoboMongo เสร็จแล้วให้รันตัวโปรแกรมขึ้นมาเลยครับ จะเห็นได้ว่ามีเพียงหน้าจอเปล่าๆ เท่านั้น เราจะมากำหนดให้ RoboMongo เชื่อมต่อกับ Database ของ MongoDB บน Local Host ของเรากันก่อนนะครับ
          - กดที่รูปไอคอนคอมพิวเตอร์ซ้ายบน
          - เลือก Create เพื่อสร้างการเชื่อมต่อใหม่
          - ป้อนข้อมูลตามภาพและกดปุ่ม Save
          - กดปุ่ม Connect ได้เลยครับ

          หลังจากนั้นหน้าจอแจ้งเตือน Error จะเด้งขึ้นมา เป็นเพราะว่าเรายังไม่ได้รัน MongoDB ครับ
ย้อนกลับออกมายังหน้าจอ Desktop ที่เราสร้าง Shortcut ของ mongod.exe เอาไว้ หลังจากนั้นก็ดับเบิลคลิกเพื่อรัน MongoDB ขึ้นมาได้เลยครับ
          หากไม่มีอะไรผิดพลาดหน้าต่างนี้จะปรากฏขึ้นมาครับ (ระหว่างการใช้งานอยู่ห้ามปิดหน้าต่างนี้เด็ดขาด) ให้กลับไปที่หน้า RoboMongo และทำการเชื่อมต่ออีกครั้ง
          หลังจากเชื่อมต่อสำเร็จจะปรากฏหน้าจอดังภาพนะครับ จะเห็นได้ว่าใน System มี Database อยู่แล้ว 2 ตัว คือ admin และ local



พื้นฐานการใช้งาน RoboMongo


          เราจะสร้าง Database ขึ้นมาใหม่นะครับโดยคลิกขวาที่ New Connection แล้วเลือก Create Database ตั้งชื่อว่าอะไรก็ได้ (ภาษาอังกฤษเท่านั้นนะครับ)

          หลังจากนั้น ภายใน Database ใหม่ที่เราสร้าง คลิกขวาขึ้นมาและเลือก Create Collection และตั้งชื่อได้ว่าอะไรก็ได้ครับ (customers, employees, students, people ....)

          ลองคลิกขวาที่ Collection ที่เราสร้างขึ้นมาดูจะมีคำสั่งย่อยต่างๆ

          - View Document ดูแฟ้มข้อมูลทั้งหมดใน Collection
          - Insert Document เพิ่มแฟ้มข้อมูล
          - Update Document แก้ไขแฟ้มข้อมูล
          - Remove Document ลบแฟ้มข้อมูล (ใส่เงื่อนไขการลบ)
          - Remove All Document ลบแฟ้มข้อมูลทั้งหมดใน Collection

          - Rename Collection เปลี่ยนชื่อ Collection
          - Duplicate Collection ก้อปปี้ Collection
          - Drop Collection ลบ Collection

          เราจะมาลองพิมพ์คำสั่งสร้างแฟ้มข้อมูลกันดูครับ ด้วย Mongo Shell คลิกขวาที่ Database ที่เราสร้าง และเลือก Open Shell จะปรากฏช่องสี่เหลี่ยมสีดำให้เราพิมพ์คำสั่งลงไปครับ

          คำสั่งสำหรับเพิ่มข้อมูลมี 2 แบบจะใช้ตัวไหนก็ได้ครับ
          - db.collectionName.insert();
          - db.getCollection("collectionName").insert();

db.customers.insert(
{"name": "Leanne Graham","email": "Sincere@april.biz","company": {"name": "Microsoft","country": "USA"
},"joinDate": ISODate("2014-01-16T00:00:00Z"),"age": 47,"isConfirmed": true,"phone": [ "088-59xxxxx", "042-34xxxxx" ]
}
)

          กดปุ่ม Execute ด้านบนเพื่อรันคำสั่งได้เลยครับ ถ้าพิมพ์คำสั่งถูกต้องจะปรากฏข้อความ Inserted 1 record(s) in XXms
          ทีนี้กลับไปดูข้อมูลที่ Collection จะปรากฏข้อมูลขึ้นมาดังภาพครับ (ถ้าไม่ขึ้นให้กด ดับเบิ้ลคลิกที่ Collection หรือกด Refresh)
          จะสังเกตุได้ว่าเราไม่จำเป็นต้องกำหนด id ให้กับแฟ้มเอกสาร MongoDB จะสร้างเลข _id ขึ้นมาเองหากเราไม่ตั้งค่าให้มันตอนเราสร้างแฟ้มเอกสาร

          MongoDB ยังมีคำสั่งอื่นอีกมากมายเข้าไปอ่านกันได้ที่ https://docs.mongodb.com/manual/reference/mongo-shell/ และ https://docs.mongodb.com/manual/crud/

          ตัวอย่างคำสั่งพื้นฐาน
          - db.collection.insert() เพิ่มแฟ้มข้อมูล
          - db.collection.update() แก้ไขข้อมูล
          - db.collection.delete() ลบแฟ้มข้อมูล
          - db.collection.find() ค้นหาแฟ้มข้อมูล

          Database ของ MongoDB หากนำไปใช้จริงต้องมีการสร้าง User เพื่อควบคุมสิทธิ๋ในการเข้าถึงข้อมูล โดย MongoDB ได้ปิดระบบนี้ไว้เป็นค่าเริ่มต้น อ่านเพิ่มเติมได้ที่ https://docs.mongodb.com/manual/security/ 




อ้างอิง

          https://docs.mongodb.com/manual/crud/
          https://docs.mongodb.com/manual/reference/mongo-shell/
          https://docs.mongodb.com/manual/administration/install-community/
          https://docs.mongodb.com/manual/security/

แก้ไขล่าสุด 12 สิงหาคม 2560

ความคิดเห็น