MongoDB

Mongoose: วิธีกำหนด sub collection แบบ TypeScript

เรื่องที่เกี่ยวข้อง - course related, MongoDB, Mongoose
MongoDB

จากคอร์ส Mongoose for Web Developer เช่นเคยนะครับ พอดีส่วนนี้น่าสนใจ เพราะมีคนถามกันเข้ามาเยอะ เลยเอามาเขียนเป็น blog ไว้ จะได้หาอ้างอิงกันได้ง่ายๆ ครับ

คือเหตุจากที่ว่าตอนเราออกแบบ Schema Modeling (คอร์สแยกจาก Mongoose อีกที) เรามีหลักการที่ว่า เราสามารถเลือกเก็บข้อมูลสำคัญในตัว collection ใน document ได้ เมื่อมันรองรับเป้าหมายในการใช้งาน (The purpose of document) แต่ถ้าเราจะเอามาเขียนใช้งานจริงใน Mongoose จะทำยังไง มาดูกันเลย

เวอร์ชั่นนี้เขียนแบบ TypeScript นะ

โดยในที่นี้ เราจะมีตัวอย่างคือ

สินค้าขายดีในร้าน 1 ร้าน

  • ก็จะมีข้อมูล 2 ตัว คือ ร้าน และสินค้าที่ขายดี
  • เราจะมี document ของร้าน และมี sub collection คือสินค้าที่ขายดีครับ

1. สร้าง schema สำหรับ document ที่เป็นตัวแทนสินค้า

เราจะสร้าง schema ของสินค้าขึ้นมาก่อน เอาง่ายๆ เลยก็มีแค่ชื่อสินค้าแล้วกัน

import { Schema, model } from 'mongoose'

export interface IProduct {
   name: String
}

export const productSchema = new Schema({
    name: String
})

export default model<IProduct>('Product', productSchema)

2. นำมาใช้กำหนดเป็น sub collection ใน schema ของ document ที่เป็นตัวแทนของร้านค้า

ซึ่ง Interface ของสินค้า และ Schema ของสินค้า จะถูกนำมาใช้ในการกำหนดในส่วนของข้อมูล Store

  • Interface ของสินค้า จะถูกใช้กำหนดเป็น Type ของ Array ใน Interface ของร้านค้า
  • ส่วนของ schema ของสินค้า จะถูกใช้ใน schema ของร้านค้าตามปกติเลย
import { IProduct, productSchema } from './product';
import { Schema, model } from 'mongoose'

interface IStore {
    name: String
    // ส่วนที่ map กับ interface จะใช้ Interface เหมือนกัน โดยกำหนดเป็น type ของ Array
    featuredProduct: Array<IProduct>
}

const storeSchema = new Schema({
    name: String,

    // ส่วนที่เป็น schema จะเป็นการกำหนดสร้าง array และใส่ schema ของสินค้าลงไป 
    featuredProduct: [productSchema]
})

export default model<IStore>('Store', storeSchema)

ส่วนเหตุผลที่ว่าทำไม design แบบ sub-collection ไม่แยกเป็น collection ต่างหากเลย ใครเรียนไปแล้ว ทบทวนได้ในส่วนของวิดีโอในคอร์ส Schema Modeling for NoSQL Database นะ

เริ่มต้นยุค AI ด้วยคอร์สฟรี และพรีเมี่ยม กับพล

หากชอบสิ่งที่พลเล่า เรื่องที่พลสอน สามารถสนับสนุนพลโดยการเข้าเรียนคอร์สออนไลน์ของพลนะคร้าบ

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

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

Allow All
Manage Consent Preferences
  • Always Active

Save