Method update() โดย Default จะอัปเดตเฉพาะเอกสารแรกที่ Match (Single Document Update) เนื้อหานี้สาธิตการเพิ่ม Field StudentAge ให้กับเอกสารแรกใน Collection พร้อม upsert: true
ตัวอย่างข้อมูลทดสอบ
> db.demo162.insertOne({"StudentName":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3684359e4f06af551997c2") }
> db.demo162.insertOne({"StudentName":"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3684389e4f06af551997c3") }
> db.demo162.insertOne({"StudentName":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e36843c9e4f06af551997c4") }
แสดงข้อมูลเดิม (มี StudentAge อยู่แล้วใน Doc แรก)
> db.demo162.find();
{
"_id" : ObjectId("5e3684359e4f06af551997c2"),
"StudentName" : "Chris",
"StudentAge" : 23
}
{
"_id" : ObjectId("5e3684389e4f06af551997c3"),
"StudentName" : "Bob"
}
{
"_id" : ObjectId("5e36843c9e4f06af551997c4"),
"StudentName" : "David"
}
Query Update เอกสารแรก (Empty Filter {})
> db.demo162.update(
{},
{$set: {"StudentAge": 23}},
{upsert: true}
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
ผลลัพธ์ (เพิ่ม StudentAge ให้ Doc แรกเท่านั้น)
> db.demo162.find();
{
"_id" : ObjectId("5e3684359e4f06af551997c2"),
"StudentName" : "Chris",
"StudentAge" : 23
}
{
"_id" : ObjectId("5e3684389e4f06af551997c3"),
"StudentName" : "Bob"
}
{
"_id" : ObjectId("5e36843c9e4f06af551997c4"),
"StudentName" : "David"
}
คำอธิบายและ Syntax ใหม่
- Filter
{}= Match ทุกเอกสาร, แต่update()Default = Single Document (multi: false) - อัปเดตเอกสารแรกตาม Natural Order (ปกติคือ Insertion Order)
upsert: true: หากไม่ Match ใดๆ จะ Insert Document ใหม่ด้วย Filter + Update- Modern Syntax (MongoDB 3.2+):
updateOne({}, {$set: {StudentAge: 23}}, {upsert: true})- อัปเดต 1 DocupdateMany({}, {$set: {StudentAge: 23}}, {upsert: true})- อัปเดตทั้งหมด
- WriteResult:
nMatched=1, nModified=1แสดงว่ามี 1 Doc Match และถูกแก้ไข