การค้นหาข้อความแบบ pattern matching ใน MongoDB ใช้โอเปอเรเตอร์ $regex รองรับ Regular Expression แบบเต็มรูปแบบ
> db.demo519.insertOne({"Value": "50,60,70"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e88b9c0b3fbf26334ef6111") }
> db.demo519.insertOne({"Value": "80,90,50"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e88b9c7b3fbf26334ef6112") }
> db.demo519.insertOne({"Value": "10,30,40"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e88b9cfb3fbf26334ef6113") }
แสดงข้อมูล:
> db.demo519.find();
{ "_id" : ObjectId("5e88b9c0b3fbf26334ef6111"), "Value" : "50,60,70" }
{ "_id" : ObjectId("5e88b9c7b3fbf26334ef6112"), "Value" : "80,90,50" }
{ "_id" : ObjectId("5e88b9cfb3fbf26334ef6113"), "Value" : "10,30,40" }
คิวรีค้นหาข้อมูลที่มี "50" อยู่ใน Value
> db.demo519.findOne({Value: {$regex: /50/}});
ผลลัพธ์ (findOne คืนค่าแค่ 1 รายการแรก):
{ "_id" : ObjectId("5e88b9c0b3fbf26334ef6111"), "Value" : "50,60,70" }
ตัวเลือก $regex ที่น่าสนใจ
/pattern/i- ไม่สนใจตัวพิมพ์เล็ก/ใหญ่ (case insensitive)/^pattern/- เริ่มต้นด้วย pattern/pattern$/- จบด้วย pattern{$regex: "pattern", $options: "i"}- รูปแบบ object (ใช้ตัวแปรได้)
คำเตือนประสิทธิภาพ
Regex นำหน้า (leading wildcard เช่น /.*pattern/) จะไม่ใช้ดัชนีได้ ควรใช้ Text Search ($text) หรือสร้างดัชนีเฉพาะสำหรับการค้นหาบ่อย