แก้ปัญหา 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