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

ค้นหาข้อความใน MongoDB ด้วย Regular Expression ($regex)

การค้นหาข้อความแบบ 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) หรือสร้างดัชนีเฉพาะสำหรับการค้นหาบ่อย