Case Insensitive Search ด้วย $regex
ใช้ Operator $regex พร้อม Regular Expression เพื่อค้นหาแบบไม่สนใจตัวพิมพ์เล็ก/ใหญ่
รูปแบบที่ 1: ใช้ ^pattern$ แบบ Exact Match
db.yourCollectionName.find({ "yourFieldName" : { '$regex': '^yourValue$' } });
รูปแบบที่ 2: ใช้ Flag 'i' สำหรับ Case Insensitive
db.yourCollectionName.find({ "yourFieldName" : { '$regex': /^yourValue$/i } });
สร้างข้อมูลตัวอย่าง
> db.caseInsesitiveDemo.insertOne({"Name":"John"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8bd66293c80e3f23815e83") }
> db.caseInsesitiveDemo.insertOne({"Name":"Johnson"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8bd66693c80e3f23815e84") }
> db.caseInsesitiveDemo.insertOne({"Name":"Johny"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8bd66a93c80e3f23815e85") }
Query แบบไม่ระบุ ^ $ (Partial Match)
> db.caseInsesitiveDemo.find({ "Name" : { '$regex' : 'John' }});
{ "_id" : ObjectId("5c8bd66293c80e3f23815e83"), "Name" : "John" }
{ "_id" : ObjectId("5c8bd66693c80e3f23815e84"), "Name" : "Johnson" }
{ "_id" : ObjectId("5c8bd66a93c80e3f23815e85"), "Name" : "Johny" }
กรณีที่ 1: Exact Match ด้วย ^John$
> db.caseInsesitiveDemo.find({ "Name" : { '$regex': '^John$' }});
{ "_id" : ObjectId("5c8bd66293c80e3f23815e83"), "Name" : "John" }
กรณีที่ 2: Exact Match Case Insensitive ด้วย /^John$/i
> db.caseInsesitiveDemo.find({ "Name" : { '$regex': /^John$/i }});
{ "_id" : ObjectId("5c8bd66293c80e3f23815e83"), "Name" : "John" }
ทั้งสองวิธีให้ผลลัพธ์เดียวกัน คือ Document ที่ Name เท่ากับ "John" อย่างแน่นอน