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

อัปเดตฟิลด์ภายใน Nested Document ใน MongoDB

บทความนี้แนะนำวิธีอัปเดตฟิลด์ที่อยู่ลึกภายใน Nested Document (Object ซ้อน Object) ใน MongoDB โดยใช้ Operator $set ร่วมกับ Dot Notation

ไวยากรณ์พื้นฐาน

db.yourCollectionName.update(
  { "_id" : yourObjectId },
  { $set : { "yourOuterFieldName.yourInnerFieldName" : yourValue } }
);

สร้างข้อมูลตัวอย่าง

> db.updateDocumentDemo.insertOne(
  {
    "StudentDetails" : {
      "StudentFirstName" : "Adam",
      "StudentLastName" : "Samith"
    },
    "StudentOtherDetails" : {
      "StudentFavouriteSubject" : "MySQL",
      "StudentScore" : 45
    }
  }
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cd50bb32cba06f46efe9efe") }

แสดงข้อมูลก่อนอัปเดต

> db.updateDocumentDemo.find().pretty();
{
  "_id" : ObjectId("5cd50bb32cba06f46efe9efe"),
  "StudentDetails" : {
    "StudentFirstName" : "Adam",
    "StudentLastName" : "Samith"
  },
  "StudentOtherDetails" : {
    "StudentFavouriteSubject" : "MySQL",
    "StudentScore" : 45
  }
}

อัปเดตฟิลด์ภายใน (Inner Field)

เปลี่ยน StudentFavouriteSubject จาก "MySQL" เป็น "MongoDB"

> db.updateDocumentDemo.update(
  { "_id" : ObjectId("5cd50bb32cba06f46efe9efe") },
  { $set : { "StudentOtherDetails.StudentFavouriteSubject" : "MongoDB" } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

ตรวจสอบผลลัพธ์หลังอัปเดต

> db.updateDocumentDemo.find().pretty();
{
  "_id" : ObjectId("5cd50bb32cba06f46efe9efe"),
  "StudentDetails" : {
    "StudentFirstName" : "Adam",
    "StudentLastName" : "Samith"
  },
  "StudentOtherDetails" : {
    "StudentFavouriteSubject" : "MongoDB",
    "StudentScore" : 45
  }
}

จุดสำคัญ

  • ใช้ Dot Notation (OuterField.InnerField) เพื่อระบุตำแหน่งฟิลด์ที่ต้องการอัปเดต
  • $set จะอัปเดตเฉพาะฟิลด์ที่ระบุ ไม่กระทบฟิลด์อื่นใน Document เดียวกัน
  • ใช้ได้กับระดับซ้อนได้หลายชั้น เช่น level1.level2.level3.field