ค้นหาเอกสารด้วยคำ (Word) แบบ Case Insensitive ใน MongoDB
บทความนี้สาธิตวิธีการค้นหาเอกสารที่มีคำ (Word) เฉพาะในฟิลด์ โดยใช้ Regular Expression พร้อมแฟล็ก i (case insensitive) ในคำสั่ง find()
ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง
สร้าง collection ชื่อ demo212 มีฟิลด์ details เป็นอาร์เรย์ของออบเจกต์ที่มี Name
> db.demo212.insertOne({"details":[{"Name":"John Doe"}]});
{ "acknowledged": true, "insertedId": ObjectId("5e3e2c7603d395bdc21346ff") }
> db.demo212.insertOne({"details":[{"Name":"Chris Brown"}]});
{ "acknowledged": true, "insertedId": ObjectId("5e3e2c8003d395bdc2134700") }
> db.demo212.insertOne({"details":[{"Name":"Robert doe"}]});
{ "acknowledged": true, "insertedId": ObjectId("5e3e2c8a03d395bdc2134701") }
ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด
> db.demo212.find();
ผลลัพธ์:
{ "_id": ObjectId("5e3e2c7603d395bdc21346ff"), "details": [{ "Name": "John Doe" }] }
{ "_id": ObjectId("5e3e2c8003d395bdc2134700"), "details": [{ "Name": "Chris Brown" }] }
{ "_id": ObjectId("5e3e2c8a03d395bdc2134701"), "details": [{ "Name": "Robert doe" }] }
ขั้นตอนที่ 3: ค้นหาด้วย Regular Expression /doe/i
ใช้ Pattern /doe/i เพื่อค้นหาคำว่า "doe" ในฟิลด์ details.Name แบบไม่สนใจตัวพิมพ์เล็ก-ใหญ่
> db.demo212.find({"details.Name": /doe/i});
ผลลัพธ์ที่ได้
{ "_id": ObjectId("5e3e2c7603d395bdc21346ff"), "details": [{ "Name": "John Doe" }] }
{ "_id": ObjectId("5e3e2c8a03d395bdc2134701"), "details": [{ "Name": "Robert doe" }] }
สรุป: การใช้ Regular Expression /pattern/i ใน find() เป็นวิธีง่ายและมีประสิทธิภาพสำหรับการค้นหาข้อความแบบ Full-text search เบื้องต้น โดยไม่ต้องใช้ Text Index