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

Mongosh
เริ่มต้นคำสั่งด้วยการใช้ MongoShell หรือ mongosh
(หากยังไม่มีแนะนำติดตั้ง MongoDB ลงบนเครื่องก่อน ถ้า Mac OS อ่านบทความด้านบนได้ครับ ถ้า Windows ลองดู Link นี้
mongosh
หาก ไม่ได้ติดตั้ง MongoDB บนเครื่อง Local สามารถสร้าง MongoDB ผ่าน Cloud ได้ เช่น
- Mongo Atlas - ต้องสมัคร Account หรือมี Account ก่อน และมีขั้นตอนเล็กน้อย
- Railway - สามารถสร้างโดยไม่ต้องมี Account เหมาะสำหรับเอาไว้เทส
ในบทความนี้ ผมจะใช้ Railway ในการเทส แทนการต่อ Localhost นะครับ

กด 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 เฉยๆ

คำสั่งเบื้องต้น
คำสั่งแรก เป็นการแสดงชื่อ 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

