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

การแทนที่ค่าด้วย String Literal ใน MongoDB Aggregation ด้วย $literal

ใช้ $literal เพื่อตั้งค่าคงที่ (String Literal) ใน Aggregation Projection

บทความนี้สาธิตการใช้งานออปเจอเตอร์ $literal ในขั้นตอน $project ของ Aggregation Pipeline เพื่อแทนที่ค่าของฟิลด์ด้วยค่าคงที่ (String Literal) ที่ระบุไว้

ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง

> db.replacevaluedemo.insertOne({"StudentName":"Chris","StudentFavouriteSubject":{"TeacherName":"Bob","SubjectCode":"MySQL111"}});
{ "acknowledged": true, "insertedId": ObjectId("5e0390a3f5e889d7a51994fd") }
> db.replacevaluedemo.insertOne({"StudentName":"Mike","StudentFavouriteSubject":{"TeacherName":"David","SubjectCode":"3221Java"}});
{ "acknowledged": true, "insertedId": ObjectId("5e0390b8f5e889d7a51994fe") }

ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด

> db.replacevaluedemo.find().pretty();

ผลลัพธ์:

{ "_id": ObjectId("5e0390a3f5e889d7a51994fd"), "StudentName": "Chris", "StudentFavouriteSubject": { "TeacherName": "Bob", "SubjectCode": "MySQL111" } }
{ "_id": ObjectId("5e0390b8f5e889d7a51994fe"), "StudentName": "Mike", "StudentFavouriteSubject": { "TeacherName": "David", "SubjectCode": "3221Java" } }

ขั้นตอนที่ 3: ใช้ $project พร้อม $literal

เก็บ SubjectCode เดิม แต่แทนที่ TeacherName ด้วย String Literal "UNKNOWN NAME"

> db.replacevaluedemo.aggregate([
    { "$project": {
        "_id": 1,
        "StudentFavouriteSubject": {
            "SubjectCode": 1,
            "TeacherName": { $literal: "UNKNOWN NAME" }
        }
    }}
]).pretty();

ผลลัพธ์ที่ได้

{ "_id": ObjectId("5e0390a3f5e889d7a51994fd"), "StudentFavouriteSubject": { "SubjectCode": "MySQL111", "TeacherName": "UNKNOWN NAME" } }
{ "_id": ObjectId("5e0390b8f5e889d7a51994fe"), "StudentFavouriteSubject": { "SubjectCode": "3221Java", "TeacherName": "UNKNOWN NAME" } }

สรุป: $literal มีประโยชน์เมื่อต้องการใส่ค่าคงที่ใน Pipeline โดยไม่ต้องอ้างอิงจากฟิลด์เดิม ใช้ได้ทั้ง String, Number, Object, Array