MongoDB

MongoDB และ Mongoose: การใช้ Aggregation ทำระบบกล่องสุ่ม

เรื่องที่เกี่ยวข้อง - MongoDB, Mongoose
Viewed - 13,415
Image by David Schwarzenberg from Pixabay

ช่วงนี้กล่องสุ่มกำลังเป็นเทรนด์ฮิตเลยครับ ถ้าจู่ๆ เราต้องมาทำระบบกล่องสุ่มโดยที่ข้อมูลกล่องสุ่มมีการเตรียมไว้อยู่แล้ว เราสามารถทำได้ง่ายๆ เลยได้มั้ย

คำตอบก็คือง่ายมาก เพราะในที่นี้ตัว MongoDB มีความสามารถในการสุ่ม document จาก collection อยู่แล้ว ผ่าน aggregation นั่นเอง

Aggregate $sample

รูปแบบของการสุ่มนั้น เราสามารถใช้กับ collection ที่เตรียมข้อมูลไว้แล้วได้ (แน่นอนว่าในที่นี้ไม่ได้เป็นการสุ่มเอาของมาใส่กล่องเป็นรายๆ ไปนะ) โดยการใช้ $sample

db.randomBoxes.aggregate([{ $sample: { size: 1 } }])

ซึ่งตัว $sample สามารถใส่กำหนดจำนวนสุ่มได้ด้วยนะ นั่นก็คือ size นั่นเอง โดยถ้าต้องการสุ่มออกมาจำนวนเท่าไหร่ ก็สามารถกำหนดเป็นจำนวนตัวเลขนั้นลงไปได้

นอกเหนือจากนั้น เรายังสามารถเอา $match มาใช้งานร่วมด้วย เพื่อให้กำหนดเงื่อนไขในการได้กล่องสุ่มตามที่กำหนดไว้มาอีก

db.randomBoxes.aggregate([
    { $match: { /* กำหนดเงื่อนไขลงไปเลยจ้า */ } },
    { $sample: { size: 1 } }
])

วิธีทำกล่องสุ่มใน Mongoose

และถ้าเราต้องการเอามาใช้ใน Mongoose หรือโปรเจค Node.js ก็สามารถทำได้ง่ายๆ แบบด้านล่างนี้

// สร้าง schema และ model ก่อน
const boxSchema = new mongoose.Schema({
   ...
})

const boxModel = mongoose.model('Box', boxSchema)

// จากนั้นเรียกใช้ Aggregate function ได้จาก model เลย
// random box คือกล่องที่สุ่มได้ออกมาจ้า
const randomBox = await boxMode.aggregate([
  { $sample: { size: 1 } }
])

ซึ่งเทคนิคนี้สามารถเอาไปใช้กับฐานข้อมูลแบบ NoSQL ได้ รวมไปถึง Azure Cosmos DB ครับ

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

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

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

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

Privacy Preferences

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

Allow All
Manage Consent Preferences
  • Always Active

Save