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

การลบองค์ประกอบที่ไม่ตรงเงื่อนไขในอาร์เรย์ MongoDB ด้วย $pull และ $ne

ลบองค์ประกอบออกจากอาร์เรย์ที่ไม่ตรงตามเงื่อนไขด้วย $pull และ $ne

ใช้ $pull ร่วมกับ $ne (Not Equal) เพื่อลบองค์ประกอบในอาร์เรย์ที่ ไม่ตรง ตามเงื่อนไขที่กำหนด

ตัวอย่างข้อมูลทดสอบ

> db.demo410.insertOne({
  details: [
    { isMarried: false },
    { isMarried: true },
    { isMarried: false },
    { isMarried: "Chris" }
  ]
});

แสดงข้อมูลก่อนลบ

> db.demo410.find();

ผลลัพธ์:

{ "_id": ObjectId("..."), "details": [{ "isMarried": false }, { "isMarried": true }, { "isMarried": false }, { "isMarried": "Chris" }] }

คำสั่งลบองค์ประกอบที่ isMarried ไม่เท่ากับ true

> db.demo410.updateMany(
  { "details": { $elemMatch: { "isMarried": { $ne: true } } } },
  { $pull: { "details": { "isMarried": { $ne: true } } } }
);

ผลลัพธ์: { "acknowledged": true, "matchedCount": 1, "modifiedCount": 1 }

แสดงข้อมูลหลังลบ

> db.demo410.find();

ผลลัพธ์:

{ "_id": ObjectId("..."), "details": [{ "isMarried": true }] }

คำอธิบาย

  • Query: { "details": { $elemMatch: { "isMarried": { $ne: true } } } }: หาเอกสารที่มีอาร์เรย์ details ประกอบด้วยอย่างน้อย 1 องค์ประกอบที่ isMarried ≠ true
  • Update: { $pull: { "details": { "isMarried": { $ne: true } } } }: ลบ ทุก องค์ประกอบใน details ที่ isMarried ≠ true
  • เหลือเฉพาะองค์ประกอบที่ isMarried = true

ความแตกต่างระหว่าง Query และ Update Condition

  • Query ($elemMatch): ต้องมีอย่างน้อย 1 ตัว match -> เลือกเอกสารที่จะอัปเดต
  • Update ($pull condition): ลบ ทุกตัว ที่ match เงื่อนไขในอาร์เรย์ของเอกสารนั้นๆ

ตัวดำเนินการเปรียบเทียบที่เกี่ยวข้อง

Operatorความหมาย
$eqเท่ากับ
$neไม่เท่ากับ
$gt/$gteมากกว่า / มากกว่าหรือเท่ากับ
$lt/$lteน้อยกว่า / น้อยกว่าหรือเท่ากับ
$in/$ninอยู่ใน / ไม่อยู่ใน อาร์เรย์