การค้นหาแบบ Case Insensitive ใน MongoDB
บทความนี้สาธิตวิธีการค้นหาข้อมูลใน MongoDB โดยไม่สนใจตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ (Case Insensitive Search) โดยใช้ Regular Expression และออปเจอเตอร์ $or ร่วมกับ $in
ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง
สร้าง collection ชื่อ demo186 และเพิ่มเอกสาร 3 รายการ ที่มีฟิลด์ UserEmailId และ UserName โดยอีเมลมีตัวพิมพ์ผสมกัน
> db.demo186.insertOne({"UserEmailId":"JOHN@GMAIL.COM","UserName":"John"});
{ "acknowledged": true, "insertedId": ObjectId("5e399d769e4f06af55199808") }
> db.demo186.insertOne({"UserEmailId":"chris@gmail.com","UserName":"chris"});
{ "acknowledged": true, "insertedId": ObjectId("5e399d879e4f06af55199809") }
> db.demo186.insertOne({"UserEmailId":"DAVID@GMAIL.COM","UserName":"David"});
{ "acknowledged": true, "insertedId": ObjectId("5e399d979e4f06af5519980a") }
ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด
> db.demo186.find();
ผลลัพธ์:
{ "_id": ObjectId("5e399d769e4f06af55199808"), "UserEmailId": "JOHN@GMAIL.COM", "UserName": "John" }
{ "_id": ObjectId("5e399d879e4f06af55199809"), "UserEmailId": "chris@gmail.com", "UserName": "chris" }
{ "_id": ObjectId("5e399d979e4f06af5519980a"), "UserEmailId": "DAVID@GMAIL.COM", "UserName": "David" }
ขั้นตอนที่ 3: คิวรี่ค้นหาแบบ Case Insensitive
สร้างอาร์เรย์ของ Regular Expression พร้อมแฟล็ก i (case insensitive) แล้วใช้ $or ร่วมกับ $in เพื่อค้นหาในฟิลด์ UserEmailId หรือ UserName
> var userMailId = [ /john@gmail.com/i, /david@gmail.com/i ]
> db.demo186.find({
'$or': [
{ 'UserEmailId': { '$in': userMailId } },
{ 'UserName': 'John' }
]
})
ผลลัพธ์ที่ได้
{ "_id": ObjectId("5e399d769e4f06af55199808"), "UserEmailId": "JOHN@GMAIL.COM", "UserName": "John" }
{ "_id": ObjectId("5e399d979e4f06af5519980a"), "UserEmailId": "DAVID@GMAIL.COM", "UserName": "David" }
สรุป: การใช้ Regular Expression พร้อมแฟล็ก i ร่วมกับ $in และ $or ช่วยให้สามารถค้นหาข้อมูลได้อย่างยืดหยุ่น โดยไม่ต้องกังวลเรื่องตัวพิมพ์เล็ก-ใหญ่