บทความนี้แนะนำวิธีอัปเดตฟิลด์ที่อยู่ลึกภายใน 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