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

เพิ่มฟิลด์ค่าคงที่ (Static Value) ใน MongoDB Query ด้วย $literal

บทความนี้สาธิตการใช้ $literal ใน Aggregation Pipeline เพื่อเพิ่มฟิลด์ที่มีค่าคงที่ (Static Value) ให้กับทุก Document ในผลลัพธ์ Query

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

> db.fieldWithStaticValue.insertOne({"Name":"Larry","Age":24});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6554c7924bb85b3f48948") }
> db.fieldWithStaticValue.insertOne({"Name":"Chris","Age":23});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd655567924bb85b3f48949") }
> db.fieldWithStaticValue.insertOne({"Name":"David","Age":26});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd655607924bb85b3f4894a") }

แสดงข้อมูลต้นฉบับ

> db.fieldWithStaticValue.find();
{ "_id" : ObjectId("5cd6554c7924bb85b3f48948"), "Name" : "Larry", "Age" : 24 }
{ "_id" : ObjectId("5cd655567924bb85b3f48949"), "Name" : "Chris", "Age" : 23 }
{ "_id" : ObjectId("5cd655607924bb85b3f4894a"), "Name" : "David", "Age" : 26 }

เพิ่มฟิลด์ StaticValue = 100 ให้ทุก Document ด้วย $literal

> db.fieldWithStaticValue.aggregate([
  { 
    $project: { 
      Name: 1, 
      Age: 1, 
      "StaticValue": { $literal: 100 } 
    } 
  }
]);

ผลลัพธ์

{ "_id" : ObjectId("5cd6554c7924bb85b3f48948"), "Name" : "Larry", "Age" : 24, "StaticValue" : 100 }
{ "_id" : ObjectId("5cd655567924bb85b3f48949"), "Name" : "Chris", "Age" : 23, "StaticValue" : 100 }
{ "_id" : ObjectId("5cd655607924bb85b3f4894a"), "Name" : "David", "Age" : 26, "StaticValue" : 100 }

คำอธิบาย $literal

  • { $literal: <value> } - คืนค่า ตามตัวที่ระบุ โดยไม่ประเมิน (Evaluate) เป็น Expression
  • ใช้เมื่อต้องการใส่ค่าคงที่ เช่น ตัวเลข String Array Object ลงใน Pipeline
  • จำเป็นเมื่อค่าที่ต้องการใส่ มีรูปแบบคล้าย Operator (เช่น { $gt: 10 }) เพื่อไม่ให้ MongoDB ตีความผิด

ตัวอย่างเพิ่มเติม: $literal กับ Array และ Object

db.collection.aggregate([
  { $project: {
    tags: { $literal: ["tag1", "tag2", "tag3"] },
    meta: { $literal: { source: "api", version: 1 } }
  }}
]);

กรณีใช้งานจริง

  • เพิ่ม Metadata เช่น queryVersion, sourceSystem ให้ทุก Record
  • กำหนด Default Value สำหรับ Field ที่อาจขาดหาย
  • สร้าง Calculated Field ที่ต้องใช้ค่าคงที่ในสูตร