หัดใช้งาน MongoDB ตอนที่ 1 - ใช้งาน Mongo Shell

MongoDB Mar 21, 2023

วิธีการใช้งาน MongoDB เบื้องต้น สำหรับบทความนี้ เราจะพูดถึงการใช้ MongoDB ผ่าน MongoShell กันนะครับ เราจะใช้ MongoShell (เป็น Command Line) ในการต่อ Database เข้าถึง Collections และ CRUD (Query / Insert / Update / Delete) ข้อมูลกันนะครับ

วิธีการติดตั้ง MongoDB บน Mac OS
สำหรับวิธีการติดตั้ง MongoDB บน Mac OS เราจะใช้การติดตั้งผ่าน homebrew กันนะครับ หากใครยังไม่มี Homebrew ก็ต้องติดตั้งก่อน Devahoy - Homebrew คืออะไร? + สอนวิธีใช้งานHomebrew คืออะไร?Homebrew จากคำนิยามของมันคือ “The missing package manager for

Mongosh

เริ่มต้นคำสั่งด้วยการใช้ MongoShell หรือ mongosh (หากยังไม่มีแนะนำติดตั้ง MongoDB ลงบนเครื่องก่อน ถ้า Mac OS อ่านบทความด้านบนได้ครับ ถ้า Windows ลองดู Link นี้

mongosh

หาก ไม่ได้ติดตั้ง MongoDB บนเครื่อง Local สามารถสร้าง MongoDB ผ่าน Cloud ได้ เช่น

  • Mongo Atlas - ต้องสมัคร Account หรือมี Account ก่อน และมีขั้นตอนเล็กน้อย
  • Railway - สามารถสร้างโดยไม่ต้องมี Account เหมาะสำหรับเอาไว้เทส

ในบทความนี้ ผมจะใช้ Railway ในการเทส แทนการต่อ Localhost นะครับ

Railway
Railway is an infrastructure platform where you can provision infrastructure, develop with that infrastructure locally, and then deploy to the cloud.

กด Start a new Project -> แล้วเลือก MongoDB ได้เลย เมื่อสร้าง DB เสร็จ ให้เราที่แท็ป Connect (ตัว Railway จะใช้เป็น Mongodb 4.4.19 นะครับ ปัจจุบัน v6.0)

จากนั้นพิมพ์

mongosh <MONGODB_CONNECTION>

เช่น

mongosh mongodb://mongo:JlBnyzoCbXNZ7DZGoe8f@containers-us-west-197.railway.app:8042
ข้อควรรู้ ตัว mongodb string connection มี username และ password อยู่นะครับ เป็น secret ห้ามให้ใครรู้ ตัวอย่างผมเป็น Project Demo เฉยๆ
Devahoy - MongoDB คืออะไร? + สอนวิธีใช้งานเบื้องต้น
กระแส MEAN Stack มาแรงมากช่วงนี้ จะไม่เขียนก็ไม่ได้ ฉะนั้นบทความนี้จะพาไปรู้จักตัว M หนึ่งใน 4 ของ MEAN Stack นั่นก็คือ MongoDB กันครับ ว่ามันคืออะไร มีประโยชน์อย่างไร และใช้งานเบื้องต้นยังไงกันดีกว่า> สำหรับใครที่กำลังหัดเขียน Node.js และ Mon
บทความ MongoDB ที่ผมเคยเขียนไว้ปี 2015 (MongoDB v3)

คำสั่งเบื้องต้น

คำสั่งแรก เป็นการแสดงชื่อ database ที่เราใช้อยู่ (default คือ test)

db

เราสามารถ show databases ทั้งหมด ได้ด้วยคำสั่ง

show dbs

สามารถเปลี่ยน database ได้ ด้วยคำสั่ง use <DB_NAME> ซึ่งถ้า ไม่มี database นั้นอยู่ มันก็จะเป็นการสร้าง database ใหม่

use <DB_NAME>

# เช่น
use hello

switched to db hello

เราสามารถสร้าง new collection ได้ง่ายๆ แบบนี้ โดยค่าที่เราจะเพิ่ม ก็จะเป็นรูปแบบ JSON/BSON (สามารถ insert อะไรก็ได้ ขอแค่ให้มัน valid)

db.collectionName.insertOne( { name: 'test' } );

CRUD เบื้องต้น

Insert

เราจะลองมาสร้าง collection name ชื่อ student กันนะครับ เริ่มต้น เพิ่มข้อมูลเข้าไปใน collection ด้วยคำสั่ง insertOne

db.students.insertOne({ name: 'John Doe', score: 100 })

จะได้ผลลัพธ์ แบบนี้

{
  acknowledged: true,
  insertedId: ObjectId("64197fed0421cbe5c68d9ee2")
}

เราสามารถ insert หลายๆ ค่าได้ ด้วยคำสั่ง insertMany() และส่งค่าเป็น array ไป เช่น

db.students.insertMany([
  { name: 'Jane Doe', score: 50 },
  { name: 'Chuck Norris', score: 80 }
]);

Query

คำสั่งที่ใช้ในการเรียกดูข้อมูลคือ db.collection.find() เช่น

db.students.find();

จะมีค่าเท่ากับ SQL statement คือ

SELECT * FROM students;

ผลลัพธ์ที่ได้ จะเป็นประมาณนี้ (สังเกตว่ามี _id ที่เรา ไม่ได้ใส่ แต่ตัว MongoDB จะ generate เป็น unique id มาให้เรา (ObjectId))

[
  {
    _id: ObjectId("64197fed0421cbe5c68d9ee2"),
    name: 'John Doe',
    score: 100
  },
  {
    _id: ObjectId("641980730421cbe5c68d9ee3"),
    name: 'Jane Doe',
    score: 50
  },
  {
    _id: ObjectId("641980730421cbe5c68d9ee4"),
    name: 'Chuck Norris',
    score: 80
  }
]

หา แบบมีเงื่อนไขละ? ก็ทำได้ โดยส่งเป็น condition field: value แบบนี้

db.students.find({ name: 'John Doe' })

# มีค่าเท่ากับ SQL Statement
SELECT * FROM students WHERE name = 'John Doe';

จะได้ผลลัพธ์แบบนี้ (สังเกตว่ามันเป็น Array )

[
  {
    _id: ObjectId("64197fed0421cbe5c68d9ee2"),
    name: 'John Doe',
    score: 100
  }
]

เราสามารถ Query แบบ single data ได้ด้วยคำสั่ง db.collectionName.findOne() แบบนี้

db.students.findOne({ name: 'John Doe' });

ผลลัพธ์ก็จะได้เป็น Object ไม่ใช่ array แล้ว

นอกจากนี้เรื่อง Query มันจะมีเกี่ยวกับ query operations อีก แต่ในบทความนี้ขอยกตัวอย่างคร่าวๆ มาก่อนละกันนะครับ หากอยากอ่านเพิ่มไปลองอ่านได้ครับ

ลอง Query โดยหา students ที่มี score มากกว่า 80? เราจะใช้ $gt (หมายถึง greater than หรือ มากกว่า นั่นเอง)

db.students.findOne({ score: { $gt: 80 } })

// score = field
// { $gt: 80 } = value
เรื่อง Query ยังมีตัวอย่าง หรือวิธีการ Query อีกเยอะแยะ มากมายนะครับ สำหรับบทความเริ่มต้น ค่อยๆ เข้าใจแบบง่ายๆ ก่อนละกันเนอะ

Update

การอัพเดทข้อมูล เราจะใช้คำสั่ง db.collectionName.updateOne(condition, value)

ตัวอย่าง เช่น ต้องการ อัพเดท คนที่ชื่อ John Doe ให้มี score = 99

db.students.updateOne({ name: 'John Doe' }, { $set: { score: 99 } })

อีกคำสั่งนึงก็คือการอัพเดทหลายๆ ค่า นั่นเอง ก็จะเป็น updateMany() เช่น

db.students.updateMany({ score: {$gt: 50} }, { $set: { score: 0 } })

Delete

การลบข้อมูล จะมีแบบลบ แบบข้อมูลเดี่ยว กับชุดข้อมูล ด้วยคำสั่ง deleteOne() และ deleteMany()

การ Delete จริงๆ คือคล้ายกับการ Query เลย คือ ใส่ condition ที่เราต้องการจะลบ เช่น ผมจะลบ คนที่ชื่อ Chuck Norris

db.students.deleteOne({ name: 'Chuck Norris' });

เช่นกัน การลบข้อมูลด้วย deleteMany() ก็ทำแบบเดียวกันเลย เช่น ( $gte คือ greater than or equal = มากกว่าหรือเท่ากับ)

db.students.deleteMany({ score: { $gte: 0 } });

สรุป

บทความนี้เป็นเนื้อหา MongoDB เบื้องต้น สอนให้รู้จักกับการต่อ Database และการทำ CRUD เบื้องต้นนะครับ ลองไปฝึก Query ฝึก Insert ข้อมูลกันดูนะครับ

หากใครชอบการ Challenge ลองไปโหลด Sample DB มาใช้ และก็ Query / Insert ข้อมูลเล่นๆ ได้ เช่น Airbnb Listing, mFix อะไรเป็นต้น ที่นี่ Load Sample Data

Happy Coding ❤️

References

Perform CRUD Operations
Query and Projection Operators

Tags

Chai Phonbopit

เป็น Web Dev ทำงานมา 10 ปีหน่อยๆ ด้วยภาษา JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจ Web3, Crypto และ Blockchain เขียนบล็อกที่ https://devahoy.com