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

การทดสอบความเท่ากันของค่าภายนอก 2 ค่าใน MongoDB Criteria Object

ทดสอบความเท่ากันของตัวแปรภายนอกใน 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 บางตัวหรือเวอร์ชันใหม่