Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

วิธีลบข้อมูลบางส่วน (Partial Data) ใน MongoDB


ใช้ remove() หรือ deleteMany() พร้อม Query เลือกเอกสาร

การลบ "ข้อมูลบางส่วน" มักหมายถึง: ลบเอกสารบางส่วนในคอลเลกชัน (ไม่ใช่ลบฟิลด์ในเอกสาร - ใช้ $unset)

ตัวอย่างข้อมูล (7 เอกสาร)

> db.demo488.insertOne({ "Name": "Chris" });
> db.demo488.insertOne({ "Name": "David" });
> db.demo488.insertOne({ "Name": "Bob" });
> db.demo488.insertOne({ "Name": "Mike" });
> db.demo488.insertOne({ "Name": "Sam" });
> db.demo488.insertOne({ "Name": "John" });
> db.demo488.insertOne({ "Name": "Robert" });

Query ลบ 3 รายการสุดท้าย (Skip 4 ตัวแรก)

> var deleteData = db.demo488.find({}, { _id: 1 }).skip(4).toArray().map(function(d) { return d._id; });
> db.demo488.remove({ _id: { $in: deleteData } });
WriteResult({ "nRemoved": 3 })

ผลลัพธ์ (เหลือ 4 รายการแรก)

{ "_id": ObjectId(...), "Name": "Chris" }
{ "_id": ObjectId(...), "Name": "David" }
{ "_id": ObjectId(...), "Name": "Bob" }
{ "_id": ObjectId(...), "Name": "Mike" }

คำอธิบายโค้ด

  1. find({}, { _id: 1 }) - ดึง _id ทั้งหมด
  2. .skip(4) - ข้าม 4 รายการแรก
  3. .toArray() - แปลง cursor เป็น array
  4. .map(...) - ดึง _id ออกมาเป็น array
  5. remove({ _id: { $in: deleteData } }) - ลบเอกสารที่ _id อยู่ใน array

รูปแบบใหม่แนะนำ (MongoDB 3.2+)

// deleteMany - ลบหลายเอกสาร
db.demo488.deleteMany({ _id: { $in: deleteData } });

// หรือใช้ aggregation หา _id แล้วลบ
const idsToDelete = db.demo488.aggregate([
  { $skip: 4 },
  { $project: { _id: 1 } }
]).toArray().map(d => d._id);

db.demo488.deleteMany({ _id: { $in: idsToDelete } });

ลบฟิลด์ในเอกสาร (ไม่ใช่ลบเอกสาร)

หากหมายถึงลบฟิลด์เฉพาะ ใช้ $unset:

db.demo488.updateMany({}, { $unset: { "FieldToRemove": "" } });

ลบอิลิเมนต์ในอาร์เรย์

// ลบอิลิเมนต์ที่ Name = "Bob" จากอาร์เรย์ details
db.demo488.updateMany({}, { $pull: { details: { Name: "Bob" } } });