ข้ามไปยังเนื้อหา

บทนำและ Documents

ยินดีต้อนรับสู่ MongoDB — From Zero to Hero คอร์สนี้จะพาคุณจากคนที่ไม่เคยแตะ database มาก่อนเลย ไปสู่การออกแบบโมเดลข้อมูล query ข้อมูล สร้าง index เพื่อความเร็ว รวมข้อมูลด้วย aggregation ให้กลายเป็นรายงาน ไปจนถึงรันบน production ได้อย่างสบายมือ เราจะทำงานผ่านตัวอย่างที่จับต้องได้ตลอดทาง: โลกจำลองเล็ก ๆ ของสมาชิกห้องสมุดและหนังสือที่พวกเขายืม ตั้งใจให้เล็กไว้เพื่อให้แนวคิดหลักยังคงเป็นจุดเด่น ทุก operation จะถูกแสดงห้าแบบ — ใน shell mongosh และใน driver ของ Node.js, Python, Go, และ Rust — เพื่อให้บทเรียนนำไปใช้ได้กับ stack ที่คุณทำงานจริง

MongoDB เป็น document database: แทนที่จะเก็บข้อมูลของคุณเป็น row ในตารางที่ตายตัว MongoDB เก็บข้อมูลเป็น document — object คล้าย JSON ที่มี field, object ซ้อนใน และ array — จัดกลุ่มอยู่ใน collection document หน้าตาเป็นยังไงก็ได้ตามที่ข้อมูลของคุณเป็นโดยธรรมชาติ ดังนั้นรูปร่างของข้อมูลใน database จึงมักจะตรงกับรูปร่างของ object ในโค้ดของคุณ โดยไม่มีชั้นแปลงข้อมูลคั่นกลาง

คอร์สนี้มีแปดโมดูล แต่ละโมดูลต่อยอดจากอันก่อนหน้า ดังนั้นการทำตามลำดับจึงเป็นเส้นทางที่ราบรื่นที่สุด แม้ว่าทุกโมดูลจะยืนอยู่ได้ด้วยตัวเองหากคุณอยากกระโดดไปยังหัวข้อใดหัวข้อหนึ่งโดยเฉพาะ

flowchart TD
  M1["1. Intro & Documents"] --> M2["2. CRUD"]
  M2 --> M3["3. Querying"]
  M3 --> M4["4. Indexes"]
  M4 --> M5["5. Aggregation"]
  M5 --> M6["6. Data Modeling"]
  M6 --> M7["7. Transactions & Consistency"]
  M7 --> M8["8. Operations & Scaling"]
แปดโมดูลของคอร์ส เรียงตามลำดับที่ต่อยอดกัน
  • Intro & Documents — โมดูลที่คุณกำลังอยู่ตอนนี้ document database คืออะไร วิธีรัน MongoDB บนเครื่องด้วย Docker, shell และ Compass, และ BSON document จริง ๆ คืออะไร
  • CRUD — สี่คำกริยาประจำวัน: การสร้าง อ่าน อัปเดต และลบ document
  • Querying — การกรองด้วย operator, การจัดเรียง, การจำกัดจำนวน, การ project field, และการแบ่งหน้าผลลัพธ์
  • Indexes — ทำให้ query เร็วขึ้น เข้าใจว่า index มีต้นทุนอะไร และอ่าน query plan
  • Aggregation — pipeline ที่จัดกลุ่ม ปรับรูปร่าง และสรุปข้อมูลให้กลายเป็นรายงาน
  • Data Modeling — การตัดสินใจว่าเมื่อไรควร embed ข้อมูลที่เกี่ยวข้อง และเมื่อไรควรเก็บไว้ใน collection แยกต่างหาก
  • Transactions & Consistency — atomicity หลาย document, read และ write concern, และการรับประกันที่คุณพึ่งพาได้
  • Operations & Scaling — การ backup, replica set เพื่อความทนทาน, และ sharding เพื่อการเติบโต

โมดูลแรกนี้ให้ทุกอย่างที่คุณต้องการก่อนที่งานจริงจะเริ่มต้น:

  1. What is MongoDB — document database เทียบกับ relational และเมื่อไรแต่ละแบบเหมาะสม
  2. Setup with Docker — รัน MongoDB บนเครื่องจาก image ทางการในไม่กี่คำสั่ง
  3. The shell and Compass — คุยกับ database จาก terminal และ GUI และการเชื่อมต่อจากแต่ละ driver
  4. Documents and BSON — รูปแบบไบนารีที่อยู่ใต้ JSON ของคุณ และ type ที่ document เก็บได้
  5. Document vs relational — การแปลคำศัพท์ relational เป็นคำศัพท์ MongoDB แบบเทียบเคียงกัน
  • คุณไม่จำเป็นต้องท่องจำอะไรในนี้ เป้าหมายของโมดูลนี้คือความคล่องกับคำศัพท์ — document, collection, BSON, _id — เพื่อให้โมดูลถัด ๆ ไปอ่านได้ลื่นไหล
  • ทุกอย่างรันบนเครื่อง เราใช้ Docker เพื่อให้ไม่มีอะไรต้องติดตั้งถาวร และไม่มีอะไรต้องตามเก็บกวาดด้วยมือทีหลัง
  • ถ้าคุณรู้ SQL อยู่แล้ว บทเรียนสุดท้ายของโมดูลนี้คือทางที่เร็วที่สุดในการ map สิ่งที่คุณรู้เข้ากับ MongoDB
ตัวเลือกBenefitCost
schema ที่ยืดหยุ่นของ document modelเริ่มเขียนโค้ดและ ship ฟีเจอร์ได้เร็วโดยไม่ต้องออกแบบ schema ให้สมบูรณ์ตั้งแต่วันแรกไม่มีการรับประกันตอน compile time ว่าทุก document ใน collection จะมีรูปร่างเดียวกัน ความสม่ำเสมอเป็นหน้าที่ของทีมคุณเอง
BSON ที่มี type มากกว่า JSONเก็บ Date, ObjectId, Decimal128 ได้แม่นยำโดยไม่ต้องแปลงค่าเองdriver แต่ละภาษา map type พวกนี้เข้ากับ native type ของตัวเองต่างกัน ต้องเข้าใจ mapping ก่อนใช้งานจริง
  • คิดว่า “ไม่มี schema” แปลว่าไม่ต้องออกแบบอะไรเลย — schema ที่ยืดหยุ่นยังต้องการวินัย ทีมที่ปล่อยให้ document แต่ละใบมีรูปร่างต่างกันไปเรื่อย ๆ โดยไม่ตั้งใจจะเจอ bug ตอน query ทีหลัง
  • ข้ามลำดับโมดูลเพราะคิดว่าแต่ละโมดูลแยกอิสระเต็มที่ — โมดูลต่อยอดจากกัน โดยเฉพาะคำศัพท์ใน Intro & Documents ที่โมดูลหลัง ๆ ใช้ซ้ำตลอด การข้ามไปเรียน Aggregation ก่อนอาจทำให้งงกับคำว่า document, field, BSON
  • มองว่า MongoDB คือ database เดียวที่เหมาะกับทุกงาน — โมดูลนี้จะพูดถึงเมื่อไร document database เหมาะและเมื่อไร relational database ยังเป็นตัวเลือกที่ดีกว่า การเลือกอย่างตั้งใจสำคัญกว่าการใช้เพราะกระแส

💡 ตัวอย่างจากของจริง

eBay — ใช้ MongoDB เป็น metadata store สำหรับข้อมูลที่มีรูปร่างหลากหลายมากในแต่ละหมวดสินค้า ซึ่ง schema ที่ยืดหยุ่นของ document model รองรับได้โดยไม่ต้องมี table แยกสำหรับทุกหมวด

Forbes — ใช้ MongoDB เป็น backend ของ CMS เพราะเนื้อหาบทความแต่ละประเภท (ข่าว, วิดีโอ, gallery) มีโครงสร้าง field ที่ต่างกัน การเก็บเป็น document เดียวต่อบทความง่ายกว่าการพยายามยัดทุกประเภทลงตาราง relational เดียว

หน่วยข้อมูลพื้นฐานที่ MongoDB เก็บคืออะไร?
คอร์สนี้มีทั้งหมดกี่โมดูล?
โมดูลไหนสอนเรื่องการทำให้ query เร็วขึ้น?