ส่องข้อมูลใน Database ด้วย MongoDB Compass

aofleejay
aofleejay
Jan 6 · 3 min read

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

[
{ id: 1, name: 'John' },
{ id: 2, name: 'James', contact: '12 village foo...' },
]

หรือแม้แต่ข้อมูลในฟิลด์เดียวกัน อาจมีชนิดของข้อมูลเป็นคนละชนิดก็ได้ (ไม่ว่าจะด้วยความตั้งใจหรือบังเอิญ 😅)

[
{ id: 1, rating: 8 },
{ id: 2, rating: 9.2 },
]

ทำให้บางครั้งเราก็มีคำถามเหล่านี้ตามมา 😕

  • ฟิลด์ชื่อ rate มีชนิดของข้อมูลเป็นอะไรนะ ? string หรือ int ?
  • ทุก document มีฟิลด์ contact ไหมนะ ? หรือว่ามีแค่บาง document ?

ด้วยความที่ MongoDB มันเป็น schemaless มันก็ได้ข้อดีเรื่องความยืดหยุ่นของการเก็บข้อมูล แต่ก็ต้องแลกมาด้วยการที่โครงสร้างของข้อมูลมันจะหน้าตายังไงก็ได้นี่แหละ ดังนั้นถ้าได้เครื่องมือมาช่วย visualize ข้อมูลสักหน่อยก็ดีเหมือนกัน 😄


ใช้ MongoDB Compass ส่องโครงสร้างกันหน่อย

เราสามารถเข้าไปดูโครงสร้างของข้อมูลผ่าน MongoDB Compass โดยใช้ฟีจเจอร์ Analyze Schema ได้เลย 🎉

สำหรับใครที่ไม่คุ้นกับ MongoDB Compass เล่าคร่าวๆ มันคือ GUI สำหรับ MongoDB หลักๆ ผมมักจะใช้เครื่องมือนี้ในการรัน query, ทำ aggegration, ดู index ครับ

การใช้งานก็ไม่ยากแค่คลิกแท็บ Schema แล้วกด analyze ก็เป็นอันเสร็จเรียบร้อย เรามาดูผลลัพธ์ที่ได้กัน

ตัวอย่างการ analyze schema ของ collection ชื่อ movies

จากภาพด้านบน ฟีจเจอร์นี้จะบอกให้เราทราบว่าข้อมูลของเรามีฟิลด์อะไรบ้าง มีชนิดของข้อมูลเป็นอะไร รวมไปถึงการ visualize ข้อมูลที่เรามีด้วย

ตัว visualization ของข้อมูล หน้าตาของมันก็ขึ้นอยู่กับชนิดของข้อมูลในฟิลด์เลย อาจจะเป็นกราฟแท่ง, ช่วงเวลา, ช่วงวันที่ เป็นต้น เรามาดูตัวอย่างกันหน่อย


จากภาพด้านล่างบอกได้ว่า มี document จำนวน 80% มีชนิดข้อมูลเป็น string และ document อีก 20% ไม่มีฟิลด์ language

Visualize ของฟิลด์ language

ถ้าเราอยากดูข้อมูลที่ไม่มีฟิลด์ language ปกติจะดูได้ด้วยฟิลเตอร์แบบนี้

{ language: { $exists: false } }

หรือในกรณีนี้ ฟิลด์ viewerRating มีชนิดข้อมูลอยู่สองประเภทคือ double และ int32 เราก็จะเห็นได้ว่า อ๋อ ฟิลด์นี้เรามีชนิดข้อมูลหลายแบบนะ หรือถ้าไม่ได้ตั้งใจจะเก็บแบบนี้ เราอาจจะใช้การ visualize ข้อมูลตรงนี้ เพื่อไปคลีนข้อมูลต่อก็ได้

Visualize ของฟิลด์ viewerRating

นอกจากจะตอบคำถามเกี่ยวกับโครงสร้างของข้อมูลแล้ว ก็ยังตอบคำถามเกี่ยวกับตัวข้อมูลเองด้วย เช่น

  • ฟิลด์ gender มีข้อมูลเป็นเพศชายหรือหญิงมากกว่ากัน ?
  • ฟิลด์ language ส่วนใหญ่แล้วเป็นภาษาอะไร ?

ด้านล่างมีฟิลด์ชื่อ gender โดยมีชนิดของข้อมูลเป็น string มีข้อมูลเก็บอยู่สองค่า คือ female จำนวน 53% และ male อีก 47%

Visualization ของฟิลด์ gender

ด้านล่างเป็นฟิลด์ language ส่วนใหญ่แล้วเป็นภาษาอังกฤษนะ

Visualize ของฟิลด์ language

บางข้อมูลก็แสดงเป็นช่วง เช่น ฟิลด์ year มีชนิดข้อมูลเป็น int32 แสดงเป็นช่วงข้อมูลตั้งแต่ 1898 ถึง 2020 ส่วนใหญ่มีค่าอยู่ใกล้ๆ ปีปัจจุบัน

Visualize ของฟิลด์ year

บางทีเรามีข้อมูลเป็น coordinates ตัว visualize ก็แสดงเป็นแผนที่ให้เลย เช่น ฟิลด์ geo มีข้อมูลเป็น coordinates ส่วนใหญ่อยู่ในอเมริกา

Visualization ของฟิลด์ geo

แต่ช้าก่อน…

ถ้าใครสังเกตด้านบนๆ ของหน้า analyze schema ดีๆ จะเห็น UI ประมาณนี้

Sampling มา 1,000 จากข้อมูลทั้งหมด 963,534 คิดเป็นแค่ 0.10%

จะเห็นว่า ข้อมูลที่นำมาแสดงผลเป็นข้อมูลสุ่ม นะครับ หมายความว่ามันไม่ได้เอาข้อมูลทั้งหมดมาแสดงผลให้เรานะ ต้องระวังตรงนี้ด้วย

เพื่อให้เห็นภาพ ผมมี collection ที่เก็บข้อมูลภาพยนตร์ แล้วผมลองใช้ schema analyze ดู ปรากฏว่าปีที่ต่ำสุดคือปี 1897

ค่าจากการสุ่ม ได้ต่ำสุดเป็น 1897

ซึ่งถ้าเราไป query จริงๆ จะรู้ว่าปีที่ต่ำที่สุดคือปี 1874 ต่างหาก ดังนั้นต้องนึกไว้เสมอนะ ว่า schema analyze นั้นสุ่มข้อมูลมา

Query เรียงตามปีจากน้อยไปมาก ได้ปีต่ำสุดเป็น 1874

นอกจากนั้นที่ตัว visualize ก็สามารถคลิกได้ เพื่อใช้ฟิลเตอร์ข้อมูลต่อไปได้อีก เช่น ด้านล่างผมคลิกแท่งที่เป็นแนวดราม่า ก็จะมีฟิลเตอร์ขึ้นมาให้

ฟิลเตอร์จะเปลี่ยนตามข้อมูลที่เรากดเลือก

ถ้ากด analyze อีกรอบก็จะได้ข้อมูลแบบนี้ จะเห็นว่าตรงฟิลด์ genre มีแต่ค่า Drama เท่านั้น และจำนวน document ก็ถูกฟิลเตอร์เหลือแค่แปดหมื่นกว่าๆ

ใช้ฟิลเตอร์ร่วมกับการ analyze schema

สาเหตุที่ผมเขียนบทความนี้ขึ้นมาเพราะมีงานที่อยากเข้าไปเห็นภาพรวมคร่าวๆ ของข้อมูล อย่างที่บอกไปครับ ถึงแม้ว่าจะเป็นข้อมูลแบบสุ่ม แต่ว่ามันก็สามารถบอกแนวโน้มของหรือภาพรวมของข้อมูลเราได้

มีหลายครั้งที่ผมอยากรู้ว่าฟิลด์นั้นฟิลด์นี้ มีอยู่ในทุก document ไหม ผมก็ใช้ฟีจเจอร์นี้ในการดู หรือบางครั้งอยากจะคลีนข้อมูล ก็ใช้ตรงนี้ดูภาพรวมของข้อมูลได้เหมือนกัน 😋

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade