ทดสอบความเท่ากันของตัวแปรภายนอกใน MongoDB Query
บทความนี้สาธิตเทคนิคพิเศษในการใช้ $type ร่วมกับการเปรียบเทียบตัวแปร JavaScript ภายนอก (External Variables) ภายใน MongoDB Query Criteria
ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง
> db.demo211.insertOne({id:101,"Name":"Chris"});
{ "acknowledged": true, "insertedId": ObjectId("5e3e298203d395bdc21346fa") }
> db.demo211.insertOne({id:102,"Name":null});
{ "acknowledged": true, "insertedId": ObjectId("5e3e2a5403d395bdc21346fb") }
ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด
> db.demo211.find();
ผลลัพธ์:
{ "_id": ObjectId("5e3e298203d395bdc21346fa"), "id": 101, "Name": "Chris" }
{ "_id": ObjectId("5e3e2a5403d395bdc21346fb"), "id": 102, "Name": null }
ขั้นตอนที่ 3: ทดสอบความเท่ากันของ v1 และ v2 แล้วใช้ใน $type
ตัวอย่างนี้เป็นการสาธิตแนวคิด: กำหนดตัวแปร v1=200, v2=200 แล้วใช้ผลลัพธ์ของ (v1 === v2) (ซึ่งเป็น true = 1) บวกกับ 1 ได้ 2 แล้วใช้เป็นค่า $type (Type 2 = String) เพื่อกรองฟิลด์ Name ที่เป็น String
> v1=200; 200
> v2=200; 200
> db.demo211.find({Name: 'Chris', Name: { $type: 1 + (v1 === v2) }});
ผลลัพธ์ที่ได้
{ "_id": ObjectId("5e3e298203d395bdc21346fa"), "id": 101, "Name": "Chris" }
คำอธิบาย:
v1 === v2คืนค่าtrue(ใน JavaScript true = 1)1 + 1 = 2$type: 2หมายถึง BSON Type "String"- ดังนั้น Query จะหาเอกสารที่
Name: "Chris"และNameเป็นประเภท String
หมายเหตุ: นี่เป็นเทคนิคขั้นสูง/ทดลอง ไม่ควรใช้ใน Production จริง เนื่องจากพึ่งพาการประเมินค่า JavaScript ภายนอกซึ่งอาจไม่รองรับใน Driver บางตัวหรือเวอร์ชันใหม่