ใช้ 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" }
คำอธิบายโค้ด
find({}, { _id: 1 })- ดึง _id ทั้งหมด.skip(4)- ข้าม 4 รายการแรก.toArray()- แปลง cursor เป็น array.map(...)- ดึง _id ออกมาเป็น arrayremove({ _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" } } });