8 เม.ย. 2021 เวลา 02:00 • การศึกษา
MongoDB : EP07 - การลบข้อมูลใน MongoDB
Delete One And Many
การลบข้อมูลใน Collection สำหรับ MongoDB นั้น สามารถทำได้โดยการลบทีละแถว ( 1 Row ) และลบทีละหลายแถว ( More Rows ) หรือลบทั้งหมด ( All )
1. การลบข้อมูลทีละแถว (​ Row ) ใน Collection ของ MongoDB
Delete One Row
ภายในคลาส (​ Class ) : MongoDB ทำการสร้างฟังก์ชั่นสำหรับการลบข้อมูลทีละ 1 แถวโดยการเรียกใช้งานฟังก์ชั่น delete_one() ซึ่งเป็นฟังก์ชั่นของ PyMongo โดยเมื่อมีการส่ง query_set เพื่อลบข้อมูลตาม query_set โดยเมื่อทำการลบสำเร็จ ค่า deleted_count ก็จะมีค่ามากกว่า 0 เราสามารถใช้สำหรับเช็คสถานะการลบข้อมูลได้
Test Delete One Row
ทดสอบการทำงานโดยการลบข้อมูลด้วย ObjectID จากนั้นทำการเรียกใช้งานฟังก์ชั่น delete_row() พร้อมทั้งส่ง query_set เสร็จแล้วทำการรันโปรแกรม โดยก่อนการลบข้อมูล ใน Collection จะมีชุดข้อมูลดังนี้
{
"_id" : ObjectId("60684a4042b575b5fb070aa8"),
"name" : "l3oxME-01",
"age" : 1,
"salary" : 2,
"created" : "2021-04-03T17:58:08.679669"
}
{
"_id" : ObjectId("60684a4042b575b5fb070aa9"),
"name" : "l3oxME-02",
"age" : 25,
"salary" : 2,
"created" : "2021-04-03T17:58:08.679745"
}
{
"_id" : ObjectId("60684a4042b575b5fb070aaa"),
"name" : "l3oxME-03",
"age" : 30,
"salary" : 3,
"created" : "2021-04-03T17:58:08.679753"
}
เมื่อทำการลบเเล้ว ข้อมูลที่ส่งจาก query_set ก็จะถูกลบออกจาก Collection โดยผลลัพธ์เมื่อใช้ฟังก์ชั่นลบ เป็น
Delete {'_id': ObjectId('60684a4042b575b5fb070aa8')} in 1 row successfully
ซึ่งหลังจากนั้นเมื่อตรวจเช็คใน Collection อีกครั้ง ก็จะเหลือข้อมูล ดังนี้
{
"_id" : ObjectId("60684a4042b575b5fb070aa9"),
"name" : "l3oxME-02",
"age" : 25,
"salary" : 2,
"created" : "2021-04-03T17:58:08.679745"
}
{
"_id" : ObjectId("60684a4042b575b5fb070aaa"),
"name" : "l3oxME-03",
"age" : 30,
"salary" : 3,
"created" : "2021-04-03T17:58:08.679753"
}
2. การลบข้อมูลหลายแถว (​ Rows ) ใน Collection ของ MongoDB
Delete Many Rows
สร้างฟังก์ชั่นภายในคลาส ( Class ) : MongoDB โดยเป็นฟัง์ชั่นที่ไว้ใช้สำหรับการลบข้อมูลทีละหลายๆแถว โดยมีลักษณะการทำงานดังนี้
- delete_rows() : ฟังก์ชั่นลบข้อมูลทีละหลายแถว โดยภายในมีการเรียกใช้ฟังก์ชั่นของ PyMongo คือ delete_many() โดยผลลัพธ์คือถ้ามีการลบข้อมูลที่มากกว่า 1 แถว จะแสดงออกทางหน้าจอ "Delete in จำนวนที่ลบ rows"
Test Delete Many Rows
ทดสอบการทำงานฟังก์ชั่นโดยการเรียกใช้งานฟังก์ชั่น delete_rows() พร้อมทั้งกำหนด query_set โดยให้ลบข้อมูลที่ salary > 20000 ขึ้นไป จากนั้น เมื่อทำการรันโปรแกรม ก็จะทำการลบข้อมูลใน Collection ทั้งหมดที่มี salary > 20000 โดยก่อนลบมีข้อมูลใน Collection ดังนี้
{
"_id" : ObjectId("60684a9bc37a78352f612309"),
"name" : "l3oxME-01",
"age" : 30,
"salary" : 25000,
"created" : "2021-04-03T17:59:39.661686"
}
{
"_id" : ObjectId("60684a9bc37a78352f61230a"),
"name" : "l3oxME-02",
"age" : 25,
"salary" : 20000,
"created" : "2021-04-03T17:59:39.661718"
}
{
"_id" : ObjectId("60684a9bc37a78352f61230b"),
"name" : "l3oxME-03",
"age" : 30,
"salary" : 30000,
"created" : "2021-04-03T17:59:39.661721"
}
หลังจากลบเสร็จสิ้นเเล้ว ข้อมูลที่เหลือ คือ salary ตั้งแต่ 20000 ลงมาดังนี้
{
"_id" : ObjectId("60684a9bc37a78352f61230a"),
"name" : "l3oxME-02",
"age" : 25,
"salary" : 20000,
"created" : "2021-04-03T17:59:39.661718"
}
3. การลบข้อมูลทั้งหมด ใน Collection ของ MongoDB
Delete All Rows
ทำการสร้างฟังก์ชั่นภายในคลาส ( Class ) : MongoDB สำหรับลบข้อมูลทั้งหมด ใน Collection ซึ่งไม่การทำงานดังนี้
- delete_all() : ลักษณะการทำงานจะคล้ายๆกับฟังก์ชั่น delete_rows() เพียงแต่ภายในฟังก์ชั่น delete_many() ของ PyMongo จะส่งแค่ เซตว่าง ( {} ) ไป ซึ่งจะหมายถึงการลบข้อมูลทั้งหมดที่มีใน Collection
Test Delete All
ทำการทดสอบโดยการเรียกใช้งานฟังก์ชั่น delete_all() โดยก่อนทำการลบข้อมูลเป็นดังนี้
{
"_id" : ObjectId("60684a9bc37a78352f612309"),
"name" : "l3oxME-01",
"age" : 30,
"salary" : 25000,
"created" : "2021-04-03T17:59:39.661686"
}
{
"_id" : ObjectId("60684a9bc37a78352f61230a"),
"name" : "l3oxME-02",
"age" : 25,
"salary" : 20000,
"created" : "2021-04-03T17:59:39.661718"
}
{
"_id" : ObjectId("60684a9bc37a78352f61230b"),
"name" : "l3oxME-03",
"age" : 30,
"salary" : 30000,
"created" : "2021-04-03T17:59:39.661721"
}
เมื่อทำการรันโปรแกรม ข้อมูลทั้งหมดที่มีใน Collection นั้นก็จะถูกลบออกทั้งหมด
โดยเมื่อลองทำการเช็คใน Shell ของ MongoDB ด้วยคำสั่ง
db.test_collection.find().count() ผลลัพธ์ที่ได้ ก็จะเป็น 0 หรือก็คือไม่มีข้อมูลใน Collection นั่นเอง
โฆษณา