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

MongoDB Query สำหรับการค้นหาค่าที่ตรงกันแม่นยำ (Exact Match)

ใน MongoDB การค้นหาค่าที่ตรงกันแม่นยำ (Exact Match) สามารถทำได้โดยใช้ operator $exists ร่วมกับเงื่อนไขการเปรียบเทียบค่า เนื้อหานี้จะสาธิตวิธีการค้นหาเอกสารที่มีค่า "Chris" ในฟิลด์ ListOfName โดยเฉพาะเอกสารที่เก็บค่าเป็น String เดียว ไม่ใช่ Array

ตัวอย่างข้อมูลทดสอบ

สร้าง Collection ชื่อ demo290 และเพิ่มเอกสาร 2 รายการ:

> db.demo290.insertOne({"ListOfName":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e4c0c9e5d93261e4bc9ea2d") }

> db.demo290.insertOne({"ListOfName":["Chris","David"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e4c0cb05d93261e4bc9ea2e") }

แสดงข้อมูลทั้งหมดใน Collection

> db.demo290.find();

ผลลัพธ์:

{ "_id" : ObjectId("5e4c0c9e5d93261e4bc9ea2d"), "ListOfName" : "Chris" }
{ "_id" : ObjectId("5e4c0cb05d93261e4bc9ea2e"), "ListOfName" : [ "Chris", "David" ] }

Query สำหรับ Exact Match

ใช้ $and ร่วมกับ $exists: false ตรวจสอบว่าไม่มี Index ที่ 0 (คือไม่ใช่ Array) และค่าเท่ากับ "Chris":

> db.demo290.find({$and: [{'ListOfName.0': {$exists: false}}, {"ListOfName": 'Chris'}]});

ผลลัพธ์จะได้เฉพาะเอกสารที่เก็บค่า "Chris" เป็น String เดียว:

{ "_id" : ObjectId("5e4c0c9e5d93261e4bc9ea2d"), "ListOfName" : "Chris" }

คำอธิบายเพิ่มเติม

  • 'ListOfName.0': {$exists: false} - ตรวจสอบว่าไม่มี Element ตำแหน่งที่ 0 (Meaning ไม่ใช่ Array)
  • "ListOfName": 'Chris' - เปรียบเทียบค่าให้ตรงกับ "Chris"
  • วิธีนี้เหมาะสำหรับกรณีที่ฟิลด์อาจเก็บได้ทั้ง String และ Array