Positional Operator แบบ $[] (all positional operator) ใช้สำหรับอัปเดต ทุกสมาชิก ในอาร์เรย์ พร้อมใช้งานใน MongoDB 3.6+ สร้างคอลเลกชันตัวอย่าง:
> db.demo324.insertOne({"ListOfValues":[10,20,30]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e516349f8647eb59e562073") }
แสดงข้อมูล:
> db.demo324.find().pretty();
อัปเดตทุกสมาชิกในอาร์เรย์ ListOfValues ให้เป็น "MongoDB":
> db.demo324.update({"ListOfValues":[10,20,30]},{ $set: { "ListOfValues.$[]": "MongoDB" } }, { upsert: true });
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
ตรวจสอบผลลัพธ์:
> db.demo324.find().pretty();
ผลลัพธ์ (ทุกสมาชิกกลายเป็น "MongoDB"):
{ "_id" : ObjectId("5e516349f8647eb59e562073"), "ListOfValues" : [ "MongoDB", "MongoDB", "MongoDB" ] }
Positional Operators ใน MongoDB
| Operator | คำอธิบาย | รองรับตั้งแต่ |
|---|---|---|
$ | อัปเดตสมาชิกแรกที่ match query (top-level array) | MongoDB 1.4+ |
$[] | อัปเดต ทุก สมาชิกในอาร์เรย์ | MongoDB 3.6+ |
$[<identifier>] | อัปเดตสมาชิกที่ match arrayFilters (filtered) | MongoDB 3.6+ |
ตัวอย่าง $[] กับอาร์เรย์ซ้อน
หากมีอาร์เรย์ซ้อน: { arr: [ [1,2], [3,4] ] } ใช้ { $set: { "arr.$[]": 0 } } จะเปลี่ยนทุก sub-array เป็น 0 (แทนที่ sub-array ทั้งหมด) หากต้องการเข้าถึงสมาชิกใน sub-array ใช้ arr.$[].$[]