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

แก้ไขปัญหา MongoDB Robomongo: db.data.find(...).collation is not a function

แก้ปัญหา collation() ไม่ทำงานใน MongoDB/Robomongo

สาเหตุ: ฟีเจอร์ collation ถูกเพิ่มเข้ามาใน MongoDB เวอร์ชัน 3.4 หากใช้เวอร์ชันเก่ากว่า จะพบ Error: collation is not a function

ตรวจสอบเวอร์ชัน MongoDB

> db.version()
4.0.5

ตัวอย่างการใช้ Collation อย่างถูกต้อง (MongoDB 3.4+)

สร้าง Index พร้อม Collation แล้ว Query ด้วย Collation เดียวกัน

> db.collationExample.createIndex({Value: 1}, {collation: {locale: "en", strength: 1}});
{ "createdCollectionAutomatically": true, "numIndexesBefore": 1, "numIndexesAfter": 2, "ok": 1 }

> db.collationExample.insertOne({'Value':'x'});
{ "acknowledged": true, "insertedId": ObjectId("5e038a3cf5e889d7a51994f5") }
> db.collationExample.insertOne({'Value':'X'});
{ "acknowledged": true, "insertedId": ObjectId("5e038a48f5e889d7a51994f6") }
> db.collationExample.insertOne({'Value':'Y'});
{ "acknowledged": true, "insertedId": ObjectId("5e038a49f5e889d7a51994f7") }
> db.collationExample.insertOne({'Value':'a'});
{ "acknowledged": true, "insertedId": ObjectId("5e038a49f5e889d7a51994f8") }
> db.collationExample.insertOne({'Value':'á'});
{ "acknowledged": true, "insertedId": ObjectId("5e038a4bf5e889d7a51994f9") }

Query ด้วย Collation (Case & Diacritic Insensitive)

> db.collationExample.find({ Value: "a" } ).collation( { locale: "en", strength: 1 } );

ผลลัพธ์

{ "_id": ObjectId("5e038a49f5e889d7a51994f8"), "Value": "a" }
{ "_id": ObjectId("5e038a4bf5e889d7a51994f9"), "Value": "á" }

คำอธิบาย:

  • locale: "en" - กฎภาษาอังกฤษ
  • strength: 1 - ระดับ Primary (เปรียบเทียบเฉพาะ Base Character ไม่สนใจ Case และ Diacritics)
  • ต้องสร้าง Index พร้อม Collation เดียวกัน เพื่อให้ Query ใช้ Index ได้

สรุป: หากเจอ Error collation is not a function ให้ตรวจสอบ MongoDB Version ให้ >= 3.4 และ Driver/Robomongo รองรับ Collation API