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

การเปรียบเทียบสตริง (String Comparison) ใน MongoDB ด้วย $strcasecmp


ใช้ $strcasecmp สำหรับเปรียบเทียบข้อความ Case-Insensitive

Operator $strcasecmp ใน aggregation เปรียบเทียบสองสตริง **ไม่สนใจพิมพ์เล็ก/ใหญ่** คืนค่า: 1 (มากกว่า), 0 (เท่ากัน), -1 (น้อยกว่า)

ตัวอย่างข้อมูล

> db.demo490.insertOne({ "Name1": "John", "Name2": "john" });
> db.demo490.insertOne({ "Name1": "David", "Name2": "Bob" });
> db.demo490.insertOne({ "Name1": "Carol", "Name2": "Carol" });

Query เปรียบเทียบ Name1 กับ Name2

> db.demo490.aggregate([
  { $project: {
      Name1: 1,
      Name2: 1,
      Result: { $strcasecmp: ["$Name1", "$Name2"] }
  }}
]);

ผลลัพธ์

{ "_id": ObjectId(...), "Name1": "John", "Name2": "john", "Result": 0 }
{ "_id": ObjectId(...), "Name1": "David", "Name2": "Bob", "Result": 1 }
{ "_id": ObjectId(...), "Name1": "Carol", "Name2": "Carol", "Result": 0 }

คำอธิบายผลลัพธ์

  • John vs john = 0 (เท่ากัน case-insensitive)
  • David vs Bob = 1 (D > B ใน Unicode/ASCII order)
  • Carol vs Carol = 0 (เหมือนกันทุกอย่าง)

String Comparison Operators อื่นๆ

การประยุกต์ใช้

// เรียงลำดับ case-insensitive
db.demo490.aggregate([
  { $project: { Name1: 1, Name2: 1, cmp: { $strcasecmp: ["$Name1", "$Name2"] } } },
  { $sort: { cmp: 1 } }
]);

// กรองชื่อที่เหมือนกัน (ignore case)
db.demo490.aggregate([
  { $match: { $expr: { $eq: [{ $strcasecmp: ["$Name1", "$Name2"] }, 0] } } }
]);
OperatorคำอธิบายCase Sensitive
$strcasecmpเปรียบเทียบ case-insensitiveไม่
$strcmpเปรียบเทียบ case-sensitiveใช่
$substr / $substrBytes / $substrCPดึง substring-
$toLower / $toUpperแปลงตัวพิมพ์-
$trim / $ltrim / $rtrimตัด whitespace-